Hibernate映射文件之双向关联关系映射

一、双向1-N关联

Person.java

public class Person {
	private Integer id;
	private String name;
	private Integer age;
	private Set<Address> addresses = new HashSet<Address>();

        //省略setter和getter方法
}

 Address.java

public class Address implements Serializable {
	private Integer id;
	private String country;
	private String province;
	private String city;
	private Person person;

        //省略setter和getter方法
}

 

1、基于外键的双向1-N关联

因为关联需要基于外键,所以Hibernate必须要在一方的表中存储一个外键列,又因为1个person对应n个address、1个address对应1个person,所以在Address端(即n的一端)的表中存储外键列再合适不过了。

Person.hbm.xml

<class name="Person" table="person" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="name" type="string" column="name" lazy="true"/>
        <property name="age" type="integer" column="age" lazy="true"/>
       <!--不让1的一端控制关联关系,级联保存瞬态的关联对象-->
        <set name="addresses" inverse="true" cascade="all" lazy="true">
        	<key column="person_id" unique="false"/>
        	<one-to-many class="Address"/>
        </set>
</class>

  

Address.hbm.xml

<class name="Address" table="address" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="country" type="string" column="country"/>
        <property name="province" type="string" column="province"/>
        <property name="city" type="string" column="city"/>
        <many-to-one name="person" class="Person" column="person_id" unique="false" lazy="proxy"/>
</class>

2、基于连接表的双向1-N关联

Person.hbm.xml

<class name="Person" table="person" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="name" type="string" column="name" lazy="true"/>
        <property name="age" type="integer" column="age" lazy="true"/>
        <set name="addresses" table="person_address" inverse="true" cascade="all" lazy="true">
        	<key column="person_id" unique="false"/>
        	<many-to-many class="Address" column="address_id" unique="true"/>
        </set>
</class>

  Address.hbm.xml

<class name="Address" table="address" lazy="true">
        <id name="id" type="int" column="id">
        	<generator class="identity"/>
        </id>
        <property name="country" type="string" column="country"/>
        <property name="province" type="string" column="province"/>
        <property name="city" type="string" column="city"/>
        <join table="person_address">
        	<key column="address_id" unique="true"/>
        	<many-to-one name="person" class="Person" column="person_id" unique="false"/>
        </join>
</class>

 

二、双向N-N关联

 

猜你喜欢

转载自guoying252166655.iteye.com/blog/2076415