Hibernate中的Entity类之间的OneToOne关联
来源:互联网 发布:淘宝女装店招图片 编辑:程序博客网 时间:2024/06/03 17:48
Hibernate中的Entity类之间的OneToOne关联也存在单向关联和双向关联两种形式。
OneToOne关联的两个Entity类是完全对等的,任何一方都可以是这种关联的子类(owning side),而另一方是父类(reverse side)。
1. 双向关联
在OneToOne关联的两个Entity类中,选择一个作为子实体类(owning side),其对应的表中设置外键;另一个作为父实体类(inverse side)并设置mappedBy="..."关联属性。
父Entity类定义如下:
@Entity(name = "Phone")public static class Phone { @Id @GeneratedValue private Long id; private String number; @OneToOne(mappedBy = "phone", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private PhoneDetails details; public Phone() { } public Phone(String number) { this.number = number; } public Long getId() { return id; } public String getNumber() { return number; } public PhoneDetails getDetails() { return details; } public void addDetails(PhoneDetails details) { details.setPhone( this ); this.details = details; } public void removeDetails() { if ( details != null ) { details.setPhone( null ); this.details = null; } }}
子Entity类定义如下:
@Entity(name = "PhoneDetails")public static class PhoneDetails { @Id @GeneratedValue private Long id; private String provider; private String technology; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "phone_id") private Phone phone; public PhoneDetails() { } public PhoneDetails(String provider, String technology) { this.provider = provider; this.technology = technology; } public String getProvider() { return provider; } public String getTechnology() { return technology; } public void setTechnology(String technology) { this.technology = technology; } public Phone getPhone() { return phone; } public void setPhone(Phone phone) { this.phone = phone; }}
在这种双向关联中,Hibernate自动为子实体类(owning side)中的外键属性设置UNIQUE约束。如果违反了该约束,则在访问父实体类时会抛出
org.hibernate.HibernateException
异常。
2. 单向关联
在OneToOne单向关联中,只需在子实体类(owning side)设置关联,只需在子实体类(owning side)对应的表中设置外键。
父Entity类定义如下:
@Entity(name = "PhoneDetails")public static class PhoneDetails { @Id @GeneratedValue private Long id; private String provider; private String technology; public PhoneDetails() { } public PhoneDetails(String provider, String technology) { this.provider = provider; this.technology = technology; } public String getProvider() { return provider; } public String getTechnology() { return technology; } public void setTechnology(String technology) { this.technology = technology; }}
子Entity类定义如下:
@Entity(name = "Phone")public static class Phone { @Id @GeneratedValue private Long id; private String number; @OneToOne @JoinColumn(name = "details_id") private PhoneDetails details; public Phone() { } public Phone(String number) { this.number = number; } public Long getId() { return id; } public String getNumber() { return number; } public PhoneDetails getDetails() { return details; } public void setDetails(PhoneDetails details) { this.details = details; }}
1 0
- Hibernate中的Entity类之间的OneToOne关联
- Hibernate中的Entity类之间的ManyToOne关联
- Hibernate中的Entity类之间的OneToMany关联
- Hibernate中的Entity类之间的ManyToMany关联
- Hibernate OneToOne关联
- Hibernate中的Entity类之间的继承关系之一MappedSuperclass
- Hibernate中的Entity类之间的继承关系之一MappedSuperclass
- Hibernate@OneToOne关联映射的三种形式
- Hibernate中的Entity类之间的继承关系之二SINGLE_TABLE
- Hibernate中的Entity类之间的继承关系之三JOINED
- Hibernate中的Entity类之间的继承关系之四TABLE_PER_CLASS
- Hibernate annotation@OneToOne共享主键关联
- hibernate JPA @OneToOne双向关联共享主键
- Hibernate学习总结:OneToOne单向主键关联
- Hibernate学习总结:OneToOne双向主键关联
- Hibernate OneToOne注解关联查询案例
- Hibernate中的一对一(onetoone)映射
- hibernate的OneToOne映射等
- 常见的八种导致 APP 内存泄漏的问题
- runtime(一)
- Android群英转读书笔记第五章(Android Scroll分析)
- Android开发之AutoCompleteTextView控件,自动提示
- C/C++程序员必须熟练应用的开源项目
- Hibernate中的Entity类之间的OneToOne关联
- table消除 td 之间的间距
- Wet Shark and Bishops
- iOS中JavaScript和OC交互
- html5调用摄像头实现拍照并本地保存
- 关于Hibernate Could not obtain transaction-synchronized Session for current thread
- 关于高并发 悲观锁 乐观锁
- Google I/O:Android ConstraintLayout 扁平化布局入门 andstudio 2.2
- C语言实例代码