one-to-many中的inverse用法

首先对inverse做一个语言描述

inverse="true"即表示放弃对关系的维护权.在inverse所在的hibernate配置元素中,所有的关系改变将不被反映到数据库中.

例如,如下两个配置

1 Item类映射文件

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->  
  5. <hibernate-mapping>  
  6.     <class name="com.hib.entity.Item" table="item" catalog="hibernate">  
  7.         <id name="itemId" type="java.lang.Integer">  
  8.             <column name="ITEM_ID" />  
  9.             <generator class="identity" />  
  10.         </id>  
  11.         <property name="sellerId" type="int">  
  12.             <column name="SELLER_ID" not-null="true" />  
  13.         </property>  
  14.         <property name="name" type="string">  
  15.             <column name="NAME" not-null="true" />  
  16.         </property>  
  17.         <set name="bids" table="bid" inverse="true" lazy="false" fetch="select">  
  18.             <key>  
  19.                 <column name="ITEM_ID" not-null="true" />  
  20.             </key>  
  21.             <one-to-many class="com.hib.entity.Bid" />  
  22.         </set>  
  23.     </class>  
  24. </hibernate-mapping>  

 2 Bid类映射文件

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->  
  5. <hibernate-mapping>  
  6.     <class name="com.hib.entity.Bid" table="bid" catalog="hibernate">  
  7.         <id name="bidId" type="java.lang.Integer">  
  8.             <column name="BID_ID" />  
  9.             <generator class="identity" />  
  10.         </id>  
  11.         <many-to-one name="item" class="com.hib.entity.Item" fetch="select">  
  12.             <column name="ITEM_ID" not-null="true" />  
  13.         </many-to-one>  
  14.         <property name="bidderId" type="java.lang.Integer">  
  15.             <column name="BIDDER_ID" />  
  16.         </property>  
  17.         <property name="amount" type="java.lang.Integer">  
  18.             <column name="AMOUNT" />  
  19.         </property>  
  20.     </class>  
  21. </hibernate-mapping>  

 Item类映射文件中set元素的inverse="true"表示 Item 类的 set 集合放弃对关联关系的维护权.也就是说,对于一个Item类的实例.改变set中的内容,在Item 的 update 和 insert 操作中将不被反映到数据库.这句话是什么意思.请看如下代码.

已知条件:数据库中.ITEM表和BID表数据如下

ITEM 表

--------------------------------------

ITEM_ID  |  NAME

---------------------------------------

1             | item1

--------------------------------------

2             | item2

---------------------------------------

BID表

----------------------------------------

BID_ID    | ITEM_ID | AMOUNT

------------------------------------------

1             | 1            | 3000

--------------------------------------------

2             | 1            | 3000

-------------------------------------------

 

执行如下java代码

Java代码  收藏代码
  1. Item item=ItemDAO.getById(2);  
  2. Bid bid=BidDAO.getById(2);  
  3. item.getBids().add(bid);  
  4. ItemDAO.update(item);  
 

执行完后,数据库内容如下

ITEM 表

--------------------------------------

ITEM_ID  |  NAME

---------------------------------------

1             | item1

--------------------------------------

2             | item2

---------------------------------------

BID表

----------------------------------------

BID_ID    | ITEM_ID | AMOUNT

------------------------------------------

1             | 1            | 3000

--------------------------------------------

2             | 1            | 3000

-------------------------------------------

可以看到,数据库没有任何改变.

查看

Java代码  收藏代码
  1. Item item=ItemDAO.getById(2);  
  2. System.out.println(item.getBids().size());  

 size

Java代码  收藏代码
  1. Item item=ItemDAO.getById(2);  
  2. System.out.println(item.getBids().size());  
 

仍然为0.再执行如下代码

Java代码  收藏代码
  1. Item item=ItemDAO.getById(2);  
  2. Bid bid=BidDAO.getById(2);  
  3. bid.setItem(item)  
  4. BidDAO.update(bid);  

 此时数据库为

ITEM 表

--------------------------------------

ITEM_ID  |  NAME

---------------------------------------

1             | item1

--------------------------------------

2             | item2

---------------------------------------

BID表

----------------------------------------

BID_ID    | ITEM_ID | AMOUNT

------------------------------------------

1             | 1            | 3000

--------------------------------------------

2             | 2            | 3000

-------------------------------------------

再执行

Java代码  收藏代码
  1. Item item=ItemDAO.getById(2);  
  2. System.out.println(item.getBids().size());  

 size为1,从上面可以看出.inverse="true"标志着Item类不维护关联关系(不反映到数据库).而有Bid类进行维护(反映到数据库)

如果需要让Item类来维护关联关系(Bid类必须放弃对关联关系的维护)修改配置文件如下

Item 类配置文件,修改inverse="false"

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->  
  5. <hibernate-mapping>  
  6.     <class name="com.hib.entity.Item" table="item" catalog="hibernate">  
  7.         <id name="itemId" type="java.lang.Integer">  
  8.             <column name="ITEM_ID" />  
  9.             <generator class="identity" />  
  10.         </id>  
  11.         <property name="sellerId" type="int">  
  12.             <column name="SELLER_ID" not-null="true" />  
  13.         </property>  
  14.         <property name="name" type="string">  
  15.             <column name="NAME" not-null="true" />  
  16.         </property>  
  17.         <set name="bids" table="bid" inverse="false" lazy="false" fetch="select">  
  18.             <key>  
  19.                 <column name="ITEM_ID" not-null="true" />  
  20.             </key>  
  21.             <one-to-many class="com.hib.entity.Bid" />  
  22.         </set>  
  23.     </class>  
  24. </hibernate-mapping>  

 Bid 类映射文件,修改<many-to-one>元素,添加update="false",insert="false"属性,其意义为,在Bid类的update与insert操作中,忽略<many-to-one>所映射的item字段,不将其反映到数据库中

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2010-4-13 15:36:15 by Hibernate Tools 3.3.0.GA -->  
  5. <hibernate-mapping>  
  6.     <class name="com.hib.entity.Bid" table="bid" catalog="hibernate">  
  7.         <id name="bidId" type="java.lang.Integer">  
  8.             <column name="BID_ID" />  
  9.             <generator class="identity" />  
  10.         </id>  
  11.         <many-to-one name="item" class="com.hib.entity.Item" fetch="select" insert="false" update="false">  
  12.             <column name="ITEM_ID" not-null="true" />  
  13.         </many-to-one>  
  14.         <property name="bidderId" type="java.lang.Integer">  
  15.             <column name="BIDDER_ID" />  
  16.         </property>  
  17.         <property name="amount" type="java.lang.Integer">  
  18.             <column name="AMOUNT" />  
  19.         </property>  
  20.     </class>  
  21. </hibernate-mapping>  
 

 转自:http://chen-rojer-gmail-com.iteye.com/blog/642988

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值