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 >