您的位置:首页 > 其它

18.01.04,web学习第三十七天,还有一年,努力吧青年 hibernate第三天 一对多,多对多

2018-01-04 21:53 567 查看

37.hibernate第三天

1. Union 同盟,联盟

grant:同意 认同。

convert:使转变,使改变

2. session 的缓存域,session对象中有一个可以存放对象的集合。

查询时:第一次查询时,会将对象放入缓存中,再次查询,不再 查询数据库。

修改时:会使用快照对比修改前和修改后的对象的属性的区别, 只执行一次修改。

3. (一对多的封装)

映射对象时,varchar对应String,char对应Character,bigint对应Long。

     一对多封装时在1的一方对象使用Set集合表示一对多关系。

     多的一方持有一的引用。

        配置文件里外键没封。

Association 协会,社团; 联合,联系; 联想;

Transient 短暂的,转瞬即逝的,临时的。

对 一对多和多对一数据的操作:(重要)

不论是增删改还是啥,都是对一方的集合和多方的引用的操作。

如果是多方在增加:new 出多方添加到一方集合中,多方设置一方引用。

如果是多方被删除:多方的引用赋值null,一方的集合去除多方。

 


此处错误由于配置出错

 


这是由于new出来的对象是瞬时对象,需要先save再提交。









操作的进阶1:

     级联操作:目的:简化代码

     当我们在增删改客户时,需要对多个联系人进行save()方法。    我们想在save客户的时候就给我们一同save联系人。

     级联操作是双向的,可以在一方配,也可以在多方配。

   如何配: cascade=""  (倾泻,小瀑布):配完之后相应的就不用 save()操作了

    


操作的进阶2:

  Inverse属性提高效率:一的一方不维护外键

  多的一方不可以放弃维护

 


记住:当一的一方配置了inverse时,就不需要有维护关系的添加到集合的代码了(写不写无所谓):例:

 


当1的一方删除时 因为存在外键所以有两种方案删除1的一方:

 


1)inverse设置成false(维护外键),当执行session.selete方法时,   多的一方的外键置空。一的一方删除。

2)inverse设置成true(维护外键),然后cascade=”delete”,设置级联删除,有联系的一起删除。

4.(多对多的封装)

多对多需要第三方表。

多对多的对象表达,均使用set集合的形式。

当我们配置update时,session一创建不论什么操作都会帮我们建表。

 


 


该案例不存在外键,都是以主键的形式存在第三张表以维护多对多的关系。

多对多两方在维护关系时因为是向第三张表插入数据,所以他们在维护关系时必须有一方放弃维护操作(否则第三张表主键重复插入),根据业务判定谁放弃。

如何放弃维护:1)配置文件直接inverse=‘true’

              2)或者直接维护对象时不写维护关系代码

 


实现多对多中为一个人物添加一个角色:

 


在为人物添加角色时,人物是持久化状态,而角色是瞬时状态,需要对角色进行save保存,可实现cascade简化代码操作:

   略

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐