遇到数据库中表的一对多对应关系,需要配置两个表相应的***.hbm.xml文件,通过查资料现总结如下:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="此处填写包文件" >
<class name="一对多中一的实体类的类名" table="所对应的数据库的表名" >
<id name="所对应的实体类的属性(id)" column="所对应的数据表的字段(**_id)" unsaved-value="null" >
<generator class="native"/>
</id>
<property name="对应数据表中其他的字段" ></property>
……
<set name="对应实体类中的那个集合的属性" inverse="true" lazy="true" cascade="save-update" >
<key column="对应其外键的字段 "/>
<one-to-many class="对应一对多中多的实体类的类名"/>
</set>
</class>
<class name="对应一对多中多的实体类的类名" table="相对应的数据表名" >
<id name="id" column="对应表的主键字段名" unsaved-value="null" >
<generator class="native"/>
</id>
<property name="对应数据表中的其他字段" ></property>
……
<many-to-one name="对应一对多中一的实体类的属性" column="对应实体类中的那个集合的属性" ></many-to-one>
</class>
</hibernate-mapping>
例如:
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity.test" >
<class name="Person" table="Person1" >
<id name="pid" column="p_id" unsaved-value="null" >
<generator class="native"/>
</id>
<property name="name" ></property>
<set name="computers" inverse="true" lazy="true" cascade="save-update" >
<key column="p_id"/>
<one-to-many class="Computer"/>
</set>
</class>
<class name="Computer" table="Computer" >
<id name="id" column="c_id" unsaved-value="null" >
<generator class="native"/>
</id>
<property name="name" ></property>
<many-to-one name="person" column="p_id" ></many-to-one>
</class>
解释:表Person1和Computer,两者关系一对多;在Person1中增加一列p_id,用来和Computer表建立联系;在Person1的model中增加属性private Set<Computer> computers= new HashSet<Computer>(0);在Computer的model中增加属性private Person1 person.
总结具体步骤:
(1)分析表之间的具体关系(一对一、一对多还是多对多),在数据库中添加相应的字段以及约束
(2)别忘了在model中加上增加的属性
(3) 配置相应的***.hbm.xml文件