Hibernate关系(双向一对一、一对多、多对多和自身多对多)映射注解整理
来源:互联网 发布:伺服电机plc编程 编辑:程序博客网 时间:2024/06/07 10:56
下述所有的关系都由外键控制,且都为双向关系。
一、一对一(OneToOne)
1.一方(被拥有方,也就是没有外键方)
private Transcript transcript; @OneToOne(mappedBy="studentOwner",fetch=FetchType.LAZY,cascade=CascadeType.MERGE) public Transcript getTranscript() { return transcript; } public void setTranscript(Transcript transcript) { this.transcript = transcript; }
2.一方(拥有方,拥有外键方)
private Student studentOwner;//学生 @OneToOne(fetch=FetchType.LAZY,cascade=CascadeType.MERGE) @JoinColumn(name = "student_id",referencedColumnName="id") public Student getStudentOwner() { return studentOwner; } public void setStudentOwner(Student studentOwner) { this.studentOwner = studentOwner; }
二、一对多(OneToMany)
1. 一方(没有外键方)
private Set<TranscriptEntry> transcriptEntries=new HashSet<TranscriptEntry>();//成绩列表 @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.MERGE,mappedBy="transcript") public Set<TranscriptEntry> getTranscriptEntries() { return transcriptEntries; } public void setTranscriptEntries(Set<TranscriptEntry> transcriptEntries) { this.transcriptEntries = transcriptEntries; }
2. 多方(拥有外键方)
private Transcript transcript; @ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.MERGE) @JoinColumn(name="transcript_id",referencedColumnName="id") public Transcript getTranscript() { return transcript; } public void setTranscript(Transcript transcript) { this.transcript = transcript; }
三、两张表多对多(ManyToMany)
多对多关系原理就是添加第三张表管理两者直接的关系。
1、多方1
private Set<Domain>domain=new HashSet<Domain>(); @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinTable(name = "pre_domain_preplan", joinColumns = {@JoinColumn(name = "preplan_sn", referencedColumnName = "preplan_sn")}, inverseJoinColumns = {@JoinColumn(name = "domain_sn", referencedColumnName ="domain_sn")}) public Set<Domain> getDomain() { return domain; } public void setDomain(Set<Domain> domain) { this.domain = domain; }
2、多方2
private Set<Preplan> preplan=new HashSet<Preplan>(); @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinTable(name = "pre_domain_preplan", joinColumns = {@JoinColumn(name = "domain_sn", referencedColumnName = "domain_sn")}, inverseJoinColumns = {@JoinColumn(name = "preplan_sn", referencedColumnName ="preplan_sn")}) public Set<Preplan> getPreplan() { return preplan; } public void setPreplan(Set<Preplan> preplan) { this.preplan = preplan; }
3、操作第三方表
如何保存、移除二者的关系
//保存二者关系 Preplan ppModel=new Preplan(); Domain dmModel =new Domain(); dmModel.setDomainSn(ppType); if(dmModel!=null&&ppModel!=null){ Set<Domain> set = new HashSet<Domain>(); set.add(dmModel); ppModel.setDomain(set); }
三、自身多对多(ManyToMany)
private Set<Course> prerequisites=new HashSet<Course>() ;//先修课程 (自身多对多关系) private Set<Course> postCondition=new HashSet<Course>() ;//后修课程(自身多对多关系) @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinTable(name ="course_pre_post", joinColumns = {@JoinColumn(name = "post_condition_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "prerequisites_id", referencedColumnName ="id")}) public Set<Course> getPrerequisites() { return prerequisites; } public void setPrerequisites(Set<Course> prerequisites) { this.prerequisites = prerequisites; } @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinTable(name = "course_pre_post", joinColumns = {@JoinColumn(name = "prerequisites_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "post_condition_id", referencedColumnName ="id")}) public Set<Course> getPostCondition() { return postCondition; } public void setPostCondition(Set<Course> postCondition) { this.postCondition = postCondition; }
阅读全文
0 0
- Hibernate关系(双向一对一、一对多、多对多和自身多对多)映射注解整理
- Hibernate双向一对一,一对多,多对多关系映射
- Hibernate 关系映射 (一对一,一对多,多对多)
- hibernate对象关系映射(一对一,一对多,多对一,多对多的单向,双向映射)
- hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- Hibernate(七)Hibernate自身一对多和多对多关系映射
- Hibernate关联关系映射 一对一 一对多 多对一
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)
- Hibernate(5)自身一对多和多对多关系映射
- Hibernate 关系映射案例(一对一关系,一对多关系,多对多关系)
- hibernate映射多对多,一对一,一对多,自身关联综合应用
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- Hibernate的映射关系与级联(一对一、一对多、多对多)
- Hibernate关联关系映射配置(一对多,多对多,一对一)
- hibernate一对一,一对多,多对一,多对多关系映射与级联
- hibernate关系映射管理(一对多,多对一,一对一,多对多)
- hibernate关系映射管理(一对多,多对一,一对一,多对多)
- setSystemUiVisibility方法和getSystemUiVisibility方法
- 玲珑杯 1125 咸鱼商店 【二分+01背包】
- matlab实验报告
- es6let,const命令(一)
- 和泉纱雾
- Hibernate关系(双向一对一、一对多、多对多和自身多对多)映射注解整理
- 史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」
- C语言--实现队列的入队出队
- 图的深度遍历
- (个人)AR电子书系统创新实训第四周(2)
- Selective Search for Object Recoginition
- 机器学习——决策树算法
- mysql 多表联合update
- ubuntu永久关闭ntp服务