本文主要讨论hibernate一对多,多对一双向关联的注意问题:
//Organization.cfg.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>
<class table="t_organization" name="com.oa.model.Org">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sn"/>
<property name="description"/>
<!--在set上最好设置inverse="true"属性,这样就不会出现重复发出hql语句了,当然
如果设置了inverse="true"的时候,那么维护的时候,只能在另一端维护了-->
<set inverse="true" cascade="all" name="persons">
<key column="org_id"/>
<one-to-many class="com.oa.model.Person"/>
</set>
</class>
</hibernate-mapping>
//Person.cfg.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>
<class table="t_person" name="com.oa.model.Person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sex"/>
<property name="address"/>
<property name="phone"/>
<property name="duty"/>
<property name="description"/>
<many-to-one column="org_id" name="org" />
</class>
</hibernate-mapping>
在此关系中,Person只能属于一个机构,一个机构中自然有多个人,最关键的地方就是在set集合上配置inverse="true",在一对多,多对一中经常用的方法