知识大全 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配置) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
模型员工Employee—部门Department Java代码 packageDomain; publicclassEmployee publicintgetId() returnid
Hibernate对多表关联查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于公司项目的需
Hibernate各种映射关系总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 多对一 第一
Java相关:应用数据库Hibernate对多表关联查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
面试的形式有多种,有一个面试官对一个应征者,也有多对一,一对多,多对多;也有小组讨论,情景模拟游戏等其他更丰富的形式。无论面试的形式有多少,都是围绕考核
Hibernate初学之一对多、多对一关系模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 举
Hibernate的多对一和一对多操作实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hib
面试的形式有多种,有一个面试官对一个应征者,也有多对一,一对多,多对多;也有小组讨论,情景模拟游戏等其他更丰富的形式。无论面试的形式有多少,都是围绕考核应征者的素质是否符合所招聘岗位的要求而展开的。这
我现在有一个借阅信息类如下 classBorrow privateStringborrowId;//借阅流水 privateBookbook; privateUserborrowUser;