hibernate一对一关联关系(一)
hibernate一对一关联关系(1)
对hibernate一对一关联关系进行简单的分析,可供初学者参考,还提供源代码下载.
hibernate一对一唯一外键关联映射(双向关联Customer<---->Address)
一对一唯一外键关联双向,需要在两个配置文件中添加<one-to-one>标签,指示hibernate如何加载,确定两个表是一对一的关系 ,因为一个用户只能对应一个地址,因此Address表中的主键值来自于Customer表的主键值,即主键共享.
映射方式:
对hibernate一对一关联关系进行简单的分析,可供初学者参考,还提供源代码下载.
hibernate一对一唯一外键关联映射(双向关联Customer<---->Address)
一对一唯一外键关联双向,需要在两个配置文件中添加<one-to-one>标签,指示hibernate如何加载,确定两个表是一对一的关系 ,因为一个用户只能对应一个地址,因此Address表中的主键值来自于Customer表的主键值,即主键共享.
映射方式:
Address持久化类对应的配置文件Address.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.com.hibernate.one_to2_one"> <class name="Address" table="Address"> <id name="id" column="ID" > <!--Address表的主健生成策略引用Customers表的主健, --> <generator class="foreign"> <param name="property">customer</param> </generator> </id> <!--属性对应字段 --> <property name="city"></property> <property name="phone"></property> <!-- one-to-one 来配置表一对一的关联关系,constrained="true" 表示Customer表中的主键共享,当前表中的主键引用Customer表中的主键,--> <one-to-one name="customer" class="Customer" constrained="true" cascade="all"></one-to-one> </class> </hibernate-mapping>
Customer持久化类对应的配置文件Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.com.hibernate.one_to2_one"> <!--class 配置POJO与表的关联关系 --> <!-- name: POJO的名字 table:表名--> <class name="Customer" table="CUSTOMERS"> <!-- id:配置POJO中的id与表中主健的对应 --> <id name="id" column="ID"> <!--generator:主健生成策略 --> <generator class="native"></generator> </id> <!-- 配置表中的字段 name:pojo属性名 column:对应基本表中的列名 不写column属性,默认基本表的字段名与pojo属性相同 --> <property name="username"column="USERNAME"></property> <!-- 配置表中外键字段--> <!-- 配置一对一关联关系,one-to-one,--> <one-to-one name="address" class="Address" cascade="all"> </one-to-one> </class> </hibernate-mapping>
Address类 package cn.com.hibernate.one_to2_one; /** * title:Address * */ public class Address { private long id; private String city; private String phone; //用户持久化类作为属性 private Customer customer; public Address( String city,String phone){ this.city = city; this.phone = phone; } public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public long getId() { return id; } private void setId(long id) { this.id = id; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
Customer类 package cn.com.hibernate.one_to2_one; /** * title:用户pojo持久化类, * */ public class Customer { private long id;//id 区分数据表中每一条元组 sort int long private String username; private Address address;//Address对象作为属性 //构造方法 public Customer( String username ){ this.username = username; } //无参 public Customer(){ } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public long getId() { return id; } //防止修改POJO中的主键,用private private void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
单元测试类 package cn.com.hibernate.one_to2_one; import org.hibernate.Session; import org.hibernate.Transaction; import cn.com.hibernate.tool.HibernateTools; public class TestOne2One { /** *title:测试一对一的关系,双向关联 * @param args */ public static void main(String[] args) { //session Session session = HibernateTools.getSession(); //Transaction Transaction tran = session.beginTransaction(); tran.begin(); try{ //Address表 Address add = new Address( "长沙","1205" ); //Customer用户表, Customer cu = new Customer( "QQ"); cu.setAddress( add ); add.setCustomer( cu ); //save(); session.save( add ); tran.commit(); } catch( Exception e){ e.printStackTrace(); tran.rollback(); } } }