8.Hibernate双向基于外键的1-1映射

来源:互联网 发布:mac flac mp3 批量转 编辑:程序博客网 时间:2024/05/17 07:34

作为persion的映射表,使用one-to-one标签同时同时指定关联属性

<?xml version="1.0" encoding="GBK"?><!-- 指定Hibernate的DTD信息 --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.crazyit.app.domain"><!-- 映射Person持久化类 --><class name="Person" table="person_inf"><!-- 映射标识属性id --><id name="id" column="person_id"><!-- 定义主键生成器策略 --><generator class="identity" /></id><!-- 用于映射普通属性 --><property name="name" type="string" /><property name="age" type="int" /><!-- one-to-one元素映射关联属性,外键列在对方的表内 property-ref指定引用关联类的属性。 即:在address属性所属的Address类内, 必须有person属性的setter和getter方法 --><one-to-one name="address" property-ref="person" /></class></hibernate-mapping>
address的映射表使用many-to-one name="person" 指定unique="true"(即实体为1) column="person_id"外键

<?xml version="1.0" encoding="GBK"?><!-- 指定Hibernate的DTD信息 --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.crazyit.app.domain"><!-- Address持久化类 --><class name="Address" table="address_inf"><!-- 映射标识属性addressId --><id name="addressId" column="address_id"><!-- 指定主键生成器策略 --><generator class="identity" /></id><!-- 映射普通属性addressdetail --><property name="addressDetail" /><!-- 使用many-to-one映射1-1关联实体 unique="true"确定为1-1 --><many-to-one name="person" unique="true" column="person_id"not-null="true" /></class></hibernate-mapping>

public class Person {// 标识属性private Integer id;// Person的name属性private String name;// 保留Person的age属性private int age;// 记录关联实体的address属性private Address address;// id属性的setter和getter方法public void setId(Integer id) {this.id = id;}public Integer getId() {return this.id;}// name属性的setter和getter方法public void setName(String name) {this.name = name;}public String getName() {return this.name;}// age属性的setter和getter方法public void setAge(int age) {this.age = age;}public int getAge() {return this.age;}// address属性的setter和getter方法public void setAddress(Address address) {this.address = address;}public Address getAddress() {return this.address;}}

public class Address{//标识属性private int addressId;//地址详细信息private String addressDetail;//记录关联实体的person属性private Person person;//无参数的构造器public Address(){}//初始化全部属性的构造器public Address(String addressDetail){this.addressDetail = addressDetail;}//addressId属性的setter和getter方法public void setAddressId(int addressId){this.addressId = addressId;}public int getAddressId(){return this.addressId;}//addressDetail属性的setter和getter方法public void setAddressDetail(String addressDetail){this.addressDetail = addressDetail;}public String getAddressDetail(){return this.addressDetail;}//person属性的setter和getter方法public void setPerson(Person person){this.person = person;}public Person getPerson(){return this.person;}

private void testPerson() {Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();// 创建一个Person对象Person p = new Person();// 设置Person的Name为Yeeku字符串p.setName("Yeeku");p.setAge(29);// 持久化Person对象(对应于插入主表记录)session.save(p);// 创建一个瞬态的Address对象Address a = new Address("广州天河");// 先设置Person和Address之间的关联关系a.setPerson(p);// 再持久化Address对象(对应于插入从表记录)session.persist(a);tx.commit();HibernateUtil.closeSession();}



0 0
原创粉丝点击