知识大全 Hibernate持久化技术中多对多关系应用

Posted

篇首语:枕上从妨一夜睡,灯前读尽十年诗。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate持久化技术中多对多关系应用相关的知识,希望对你有一定的参考价值。

Hibernate持久化技术中多对多关系应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Hibenate作为一种Java对象持久化技术 在很多大型的多层体系构架中得到应用 比如在开发一套电子商务系统可以以J EE作为体系构架 Structs作为java Web应用框架 以Hibenate实现对象持久化任务 以EJB或者普通的javabean实现业务逻辑 其实现过程的复杂度可想而知 下面收集一些在Hibenate中多对多关系中应用技巧给大家分享

    

   cascade= ?

    

  cascade属性并不是多对多关系一定要用的 有了它只是让我们在插入或删除对像时更方便一些 只要在cascade的源头上插入或是删除 所有cascade的关系就会被自己动的插入或是删除 便是为了能正确的cascade unsaved value是个很重要的属性

    

  Hibernate通过这个属性来判断一个对象应该save还是update 如果这个对象的id是unsaved value的话 那说明这个对象不是persistence object要save(insert) 如果id是非unsaved value的话 那说明这个对象是persistence object(数据库中已存在) 只要update就行了 saveOrUpdate方法用的也是这个机制

  

   inverse= ture ?

    

  inverse属性默认是false的 就是说关系的两端都来维护关系 这个意思就是说 如有一个Student Teacher和TeacherStudent表 Student和Teacher是多对多对多关系 这个关系由TeacherStudent这个表来表现 那么什么时候插入或删除TeacherStudent表中的记录来维护关系呢?在用hibernate时 我们不会显示的对TeacherStudent表做操作

    

  对TeacherStudent的操作是hibernate帮我们做的 hibernate就是看hbm文件中指定的是 谁 维护关系 那个在插入或删除 谁 时 就会处发对关系表的操作 前提是 谁 这个对象已经知道这个关系了 就是说关系另一头的对象已经set或是add到 谁 这个对象里来了 前面说过inverse默认是false 就是关系的两端都维护关系 对其中任一个操作都会处发对表系表的操作 当在关系的一头 如Student中的bag或set中用了inverse= true 时 那就代表关系是由另一关维护的(Teacher) 就是说当这插入Student时 不会操作TeacherStudent表 即使Student已经知道了关系 只有当Teacher插入或删除时才会处发对关系表的操作

    

  所以 当关系的两头都用inverse= true 是不对的 就会导致任何操作都不处发对关系表的操作 当两端都是inverse= false 或是default值是 在代码对关系显示的维护也是不对的 会导致在关系表中插入两次关系 在一对多关系中inverse就更有意义了 在多对多中 在哪端inverse= true 效果差不多(在效率上) 但是在一对多中 如果要一方维护关系 就会使在插入或是删除 一 方时去update 多 方的每一个与这个 一 的对象有关系的对象

    

  而如果让 多 方面维护关系时就不会有update操作 因为关系就是在多方的对象中的 直指插入或是删除多方对象就行了 当然这时也要遍历 多 方的每一个对象显示的操作修关系的变化体现到DB中 不管怎样说 还是让 多 方维护关系更直观一些

    

   cascade和inverse有什么区别?

    

  可以这样理解 cascade定义的是关系两端对象到对象的级联关系 而inverse定义的是关系和对象的级联关系

    

   sf hibernate ObjectDeletedException: deleted object would be re saved by cascade (remove deleted object from associations): of class: Xxxxx

    

  这个问题出现在要删除关系的一头时 如 要删除一个已经和Student有关系的Teacher 当mit();时才会抛出这个异常 这时一个在关系另一头的Student对象中的Set或是List中把这个Teacher对象显示的remove掉 再session delete(这个teacher); 这是为了防止在Student端有cascade时把这个Teacher对象再存回DB

    

  所以 这个异常的只有在Student的关系定义中有cascade= 而且没有像上面说的显示的解除关系时才会出现 所以防止出现这个异常的方法就是 在Student端不用cascade 或是用cascade的话 就显示的删除对像中的关系 在Teacher端要用cascade

    

   sf hibernate HibernateException: identifier of an instance of my MyObject altered from N to N

    

cha138/Article/program/Java/ky/201311/28437

相关参考

知识大全 Hibernate多对多双向关联(xml配置)

Hibernate多对多双向关联(xml配置)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 hibernate关联关系-多对一

  模型员工Employee—部门Department  Java代码  packageDomain;  publicclassEmployee  publicintgetId()  returnid

知识大全 应用数据库Hibernate对多表关联查询

Java相关:应用数据库Hibernate对多表关联查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Hibernate对多表关联查询

Hibernate对多表关联查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于公司项目的需

知识大全 Hibernate各种映射关系总结

Hibernate各种映射关系总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多对一  第一

知识大全 Hibernate初学之一对多、多对一关系模型

Hibernate初学之一对多、多对一关系模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  举

知识大全 Hibernate的多对一和一对多操作实例

Hibernate的多对一和一对多操作实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hib

知识大全 面试必备问题

    面试的形式有多种,有一个面试官对一个应征者,也有多对一,一对多,多对多;也有小组讨论,情景模拟游戏等其他更丰富的形式。无论面试的形式有多少,都是围绕考核

知识大全 面试官必问的经典问题

面试的形式有多种,有一个面试官对一个应征者,也有多对一,一对多,多对多;也有小组讨论,情景模拟游戏等其他更丰富的形式。无论面试的形式有多少,都是围绕考核应征者的素质是否符合所招聘岗位的要求而展开的。这

知识大全 hibernate关系映射

  一对象关系映射基础  对象间的基本关系  首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系  关联关系关联关系在设计模式中是被提倡优先使用于继承关系的