Hibernate的对象关系映射(4)

本文介绍了Hibernate中不同类型的关联关系映射,包括一对一、多对一的关系,并详细解释了级联选项如all、none、save-update、delete的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.2关系映射

级联(cascade),取值有:all、none、save-update、delete。其中all表示在所有的情况下都进行级联操作;none表示在所有的情况下都不进行级联操作;save-update代表在执行保存更新时进行级联操作;delete表示在delete操作时进行级联操作。

2.2.1 一对一(one-to-one)

例如product和image之间的一对一关系映射如下所示。

<? xmlversion="1.0" ?>
<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.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的映射文件如下:

<? xmlversion="1.0" ?>
<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.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之间是多对一的关系。

<? xmlversion="1.0" ?>
<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.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之间是一对多的关系,映射文件如下。

<? xmlversion="1.0" ?>
<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.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 >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值