2.2 关系映射
级联(cascade),取值有:all、none、save-update、delete。其中all表示在所有的情况下都进行级联操作;none表示在所有的情况下都不进行级联操作;save-update代表在执行保存更新时进行级联操作;delete表示在delete操作时进行级联操作。
2.2.1 一对一(one-to-one)
例如product和image之间的一对一关系映射如下所示。
<?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>
<class name="com.weportal.order.Product" table="PRODUCT">
<synchronize table="ORDERITEM"/>
<synchronize table="CUSTOMERORDER"/> 
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="description"/>
<property name="price" column="PRICE"/> 
<property name="numberAvailable"></property>
<one-to-one
name="photo"
class="com.weportal.imageserver.Image"
cascade="all"
outer-join="true"
constrained="true"
foreign-key="photoId"
/>
</class>
</hibernate-mapping>image的映射文件如下:
<?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>
<class name="com.weportal.imageserver.Image" dynamic-update="true">
<id name="id">
<generator class="native"/>
</id>
<property name="name" column="NAME" />
<property name="value" column="VALUE" length="1000000"/>
</class>
</hibernate-mapping>2.2.2 多对一(many-to-one)
从持久化的角度来说,是一个类的多个实例对应另一个类的一个实例。
例如:computer和programmer之间是多对一的关系。
<?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="com.weportal.manytoone">
<class name="Programmer" table="Programmer">
<id name="programmerId">
<generator class="hilo"></generator>
</id>
<property name="name"></property>
<property name="sex"></property>
<property name="age"></property>
<property name="tel"></property>
</class>
<class name="PersonalComputer" table="PCS">
<id name="computerId">
<generator class="hilo"></generator>
</id>
<property name="cpu"></property>
<property name="memory"></property>
<property name="harddisk"></property>
<many-to-one name="owner" column="programmerId" class="Programmer"></many-to-one>
</class>
</hibernate-mapping>从另一方面看,programmer和computer之间是一对多的关系,映射文件如下。
<?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="com.weportal.manytoone">
<class name="Programmer" table="Programmer">
<id name="programmerId">
<generator class="hilo"></generator>
</id>
<property name="name"></property>
<property name="sex"></property>
<property name="age"></property>
<property name="tel"></property>
<set name="computers" inverse="true" cascade="all">
<key column="programmerId"></key>
<one-to-many class="PersonalComputer"/>
</set>
</class>
<class name="PersonalComputer" table="PCS">
<id name="computerId">
<generator class="hilo"></generator>
</id>
<property name="cpu"></property>
<property name="memory"></property>
<property name="harddisk"></property>
<many-to-one name="owner" column="programmerId" class="Programmer"></many-to-one>
</class>
</hibernate-mapping>
790

被折叠的 条评论
为什么被折叠?



