Hibernate_映射配置文件详解汇.ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate_映射配置文件详解汇

双向 1-N 测试程序1产生的 sql 语句: 仅仅save(customer),并没有save(order)但却执行了三条SQL,由生成的SQL语句可以知道,将用户 TongGang 添加到Customers表中的同时也将 order1及order2添加到Orders表中!这是因为在 Customers.hbm.xml 映射配置中,set节点的设置了cascade=save-update,所以当保存或更新Customers的时候也会自动保存相应的Orders对象! 双向 1-N 注释掉测试程序 1 中的订单关联用户的代码: 生成同样的 sql 语句,同样的数据表 customers_table 中插入的数据 orders_table中插入的数据 在Customers.hbm.xml的set节点中加了属性 inverse=true,这句话的意思是将主控制权交出去:交给了Orders,也就是用户与订单之间从属关系主要是由Orders对象来确定,也即订单自己来决定它属于哪个对象。所以在这里,将订单关联用户的代码注释掉后,虽然后面用户关联了订单,但因为用户已经将主动权交出,所以Hibernate在save订单的时候并不知道订单是属于哪个用户,自然Customers_ID字段填空值。 双向 1-N 将Customers.hbm.xml中的 inverse=true 去掉 生成的 sql 语句: 数据库表及插入的数据跟第一种情况相同 原来这种情况,Hibernate是先将订单持久化到表中,因为注释了订单关联用户的代码,所以Hibernate还是先插入空值,然后再根据用户关联订单来更新Orders表将 Customers_ID字段修改为正确的值!当数据量很大的时候,这样的操作会影响性能,同时不能将customers_ID字段定义为not null。 双向 1-N 将inverse=true加上,而用户关联订单的注释掉 生成的 sql 语句: 运行结果是仅仅将 用户添加到表中去了.关联是仅仅减缓到订单属于哪个用户,也就是关联订单的 customers_ID 字段!但用户类里,属性 Set orders = new HashSet();初始是为空的,这样虽然订单关联了用户,但用户对象内的orders属性还是为空,订单并没有产生,这样Hibernate在保存用户的时候,判断集合为空,不会去添加订单. inverse 只有集合标记(set/map/list/array/bag)才有inverse属性 在 Hibernate 中,inverse 指定了关联关系的方向。关联 关系中 inverse = false 的为主动方,由主动方负责维护 关联关系 在没有设置 inverse=true 的情况下,父子两边都维护父子 关系 在 1-N 关系中,将 many 方设为主控方(inverse = false) 将有助于性能改善(如果要国家元首记住全国人民的名字,不 是太可能,但要让全国人民知道国家元首,就容易的多) 在 1-N 关系中,若将 1 方设为主控方 会额外多出 update 语句。 插入数据时无法同时插入外键列,因而无法为外键列添加非空约束 cascade 只有关系标记才有cascade属性:many-to-one,one-to-one ,set(map, bag, idbag, list, array) + one-to-many(many-to-many) 级联指的是当主控方执行操作时,关联对象(被动方)是否 同步执行同一操作。 pojo和它的关系属性的关系就是“主控方 -- 被动方”的关 系,如果关系属性是一个set,那么被动方就是set中的每一 个元素。 一个操作因级联cascade可能触发多个关联操作。前一个操作 叫“主控操作”,后一个操作叫“关联操作”。 inverse 指的是关联关系的控制方向,而cascade指的是层级之间的连锁操作。 cascade cascade属性的可选值: all : 所有情况下均进行关联操作。 none:所有情况下均不进行关联操作。这是默认值。 save-update:在执行save/update/saveOrUpdate时进行关联操作。 delete:在执行delete时进行关联操作 delete-orphan:表示删除孤儿,delete-orphan在前者的基础上增加了一点,针对持久化对象,如果它和它所关联的对象的引用关系不存在了,则进行级联删除。 all-delete-orphan:包含all和delete-orphan的行为 双向N-N关联 双向N-N关联需要两端都使用集合属性,两端都增加对

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档