hibernate基于外键的双向1-1关系映射
来源:互联网 发布:时时彩数据分析大师 编辑:程序博客网 时间:2024/05/16 17:49
对于双向1-1关联而言,两端都需要使用@OneToOne注解进行关联,好了废话不多说直接上例子
1、首先创建数据库数据库采用sql sever 2008 r2
创建person表
创建address表
进行主外键关系的添加
2、用hibernate反向工程生成他们的实体类
person的实体类
package com.wxb.model;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.OneToOne;import static javax.persistence.GenerationType.IDENTITY;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.CascadeType;/** * PersonInf entity. * * @author 王校兵 * @version 1.0, 2015-11-27 */@Entity@Table(name = "person_inf")public class PersonInf implements java.io.Serializable {private Integer personId;private Integer age;private String name;private AddressInf addressInf;@Id@GeneratedValue(strategy = IDENTITY)@Column(name = "person_id")public Integer getPersonId() {return this.personId;}public Integer getAge() {return this.age;}public String getName() {return this.name;}@OneToOne(mappedBy = "personInf")@Cascade(CascadeType.ALL)public AddressInf getAddressInf() {return this.addressInf;}public void setAddressInf(AddressInf addressInf) {this.addressInf = addressInf;}public void setAge(Integer age) {this.age = age;}public void setName(String name) {this.name = name;}public void setPersonId(Integer personId) {this.personId = personId;}}address的实体类
package com.wxb.model;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.JoinColumn;import javax.persistence.OneToOne;import static javax.persistence.GenerationType.IDENTITY;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.CascadeType;/** * PersonInf entity. * * @author 王校兵 * @version 1.0, 2015-11-27 */@Entity@Table(name = "address_inf")public class AddressInf implements java.io.Serializable {private Integer addressId;private String addressDetial;private PersonInf personInf;public AddressInf(String addressDetial) {this.addressDetial = addressDetial;}@Id@GeneratedValue(strategy = IDENTITY)@Column(name="address_id")public Integer getAddressId() {return this.addressId;}public AddressInf() {super();}public String getAddressDetial() {return this.addressDetial;}@OneToOne(targetEntity = PersonInf.class)@JoinColumn(name = "address_id", unique = true)@Cascade(CascadeType.ALL)public PersonInf getPersonInf() {return personInf;}public void setAddressDetial(String addressDetial) {this.addressDetial = addressDetial;}public void setAddressId(Integer addressId) {this.addressId = addressId;}public void setPersonInf(PersonInf personInf) {this.personInf = personInf;}}
3、创建他们的测试类
<span style="white-space:pre"></span><pre name="code" class="java">package com.wxb.dao;import org.hibernate.Session;import org.hibernate.Transaction;import com.wxb.model.AddressInf;import com.wxb.model.PersonInf;import com.wxb.util.HibernateSessionFactory;/** * 双向一对一关联映射测试类 * @author 王校兵 * @version 1.0, 2015-11-27 * */public class BothOneToOneDao {public static void main(String[] args) {Session session = HibernateSessionFactory.getSession();Transaction ts = session.beginTransaction();PersonInf p = (PersonInf) session.get(PersonInf.class, 20);System.out.println(p.getAddressInf().getAddressDetial());AddressInf a = (AddressInf) session.get(AddressInf.class, 20);System.out.println(a.getPersonInf().getName());ts.commit();}}通过这些步骤的配置就可以实现双向一对一的映射;
小小的总结一些要注意的地方
1、对于基于外键的,外键可以放在任意的一端,存放外键的一端需要增加@JoinColumn注解来映射外键列,还应该增加unique=true属性来表示该实体实际上是1的一端
2、对于一对一的关联关系,两个实体原本处于平等状态,但是当选择任意一端来增加外键后(增加@JoinColumn注解的实体段)该表即变成从表,而另一个表则成为主表
0 0
- hibernate基于外键的双向1-1关系映射
- 8.Hibernate双向基于外键的1-1映射
- Hibernate-映射关系- 基于外键映射的1<->1映射
- Hibernate基于外键和主键的双向一对一关系映射
- hibernate的一对一主键双向映射关系和外键双向映射关系(一)
- Hibernate-映射关系- 基于主键映射的1<->1映射
- Hibernate-映射关系- 1<->n(双向)
- Hibernate的双向关系映射
- hibernate基于外键的一对一映射--单向和双向
- 9.Hibernate双向基于主键的1-1映射
- 10.Hibernate双向基于链表的1-1映射
- 12.Hibernate双向基于链表的1-N映射
- Hibernate 双向 1 对 1 对象关系映射 —外键关联 下 ,测试 crud
- Hibernate之基于外键映射的一对一(1-1)关联关系
- Hibernate学习笔记----基于外键或主键映射的1-1关联关系
- Hibernate双向的一对多关系映射
- Hibernate关系映射2:双向1-N关联
- hibernate的关系映射(1)
- scala中的compose和andThen函数剖析
- 工业4.0时代:世界不再是你过去所知道的那样
- 杭电2544-Dijkstra算法
- C程序的基本结构
- 戴旭:未来十年可能惨不忍睹,中国尚未意识到危机的逼近
- hibernate基于外键的双向1-1关系映射
- 南大软院大神养成计划第十二天
- win7下配置免安装版的MySQL 5.7.9
- CSS中id与class的区别理解
- IOS集成SQLCipher加密SQLite数据库
- 音频
- A20 最小系统改造 为ubuntu-core-14.04-core-armhf.tar.gz
- 汉诺塔递归算法实现 c++
- python第三方库点滴