Hibernate的对象关系映射(4)

    技术2022-05-11  123

    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 >

    最新回复(0)