知识大全 Hibernate中多对多关系的常见问题

Posted

篇首语:要让事情改变,行改变我自己,要让事情变得更好,先让自己变得更好。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate中多对多关系的常见问题相关的知识,希望对你有一定的参考价值。

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

   1 到底在哪用cascade= ?    cascade属性并不是多对多关系一定要用的 有了它只是让我们在插入或删除对像时更方便一些 只要在cascade的源头上插入或是删除 所有cascade的关系就会被自己动的插入或是删除 便是为了能正确的cascade unsaved value是个很重要的属性 Hibernate通过这个属性来判断一个对象应该save还是update 如果这个对象的id是unsaved value的话 那说明这个对象不是persistence object要save(insert) 如果id是非unsaved value的话 那说明这个对象是persistence object(数据库中已存在) 只要update就行了 saveOrUpdate方法用的也是这个机制      2 到底在哪用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中 不管怎样说 还是让 多 方维护关系更直观一些      3 cascade和inverse有什么区别?    可以这样理解 cascade定义的是关系两端对象到对象的级联关系 而inverse定义的是关系和对象的级联关系      4 net 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     5 net sf hibernate HibernateException: identifier of an instance of my MyObject altered from N to N    这个异常其时不是多对多中常遇到的 但是这个异常的提示不make sense 所以提一下 是因为id的java对象中的type和hbm文件中定义的不一样 如 java中用long 而hbm中用type= integer 并且generator用的是identity时就会出现     (To be add) 把hibernate遇到常见异常会一点点加上来的 cha138/Article/program/Java/ky/201311/28868

相关参考

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

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

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

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

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

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

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

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

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

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

知识大全 面试必备问题

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

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

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

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

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

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

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

知识大全 hibernate的关联关系配置问题

  我现在有一个借阅信息类如下  classBorrow  privateStringborrowId;//借阅流水  privateBookbook;  privateUserborrowUser;