对于绝大部分单向N--->1关联而言,使用基于外键的关联映射已经足够了。但由于底层数据库建模时也可以使用连接表来建立这种关联关系,因此Hibernate也为这种关联关系提供了支持。
如果需要使用连接表来映射单向N--->1关联,则需要显式使用<join.../>元素,该元素用于强制将一个类的属性映射到多张表中,通常也用于强制使用连接表。使用<join.../>元素时需要指定一个table属性,用于指定连接表的表名。
本篇文章承接上一篇文章。
我们先将test库里的表删除:
除了Person.hbm.xml文件需要修改,其余所有文件不变。
Person.hbm.xml :
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="db.domain">
<class name="Person" table="persons">
<id name="id" type="integer">
<generator class="identity"></generator>
</id>
<property name="name" type="string">
<column name="name"></column>
</property>
<property name="age" type="integer">
<column name="age"></column>
</property>
<join table="person_address">
<key column="person_id"/>
<many-to-one name="address" class="Address"
column="address_id" cascade="all"/>
</join>
</class>
</hibernate-mapping>
运行Test.java,查看数据库: