hibernate级联保存没有自动生成外键

hibernate级联保存没有自动生成外键,外键为null,经过排查,在set中添加属性时,写了inverse="true",去掉就好

inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),表示不放弃关系维护,那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文件,customer.getSetLinkMan().add(linkMan),即主控方对象的状态发生了改变,因此数据库会跟着对象状态的变化来同步更新数据库;而customer.getSetLinkMan().add(linkMan),即被控方对象的状态发生了改变,它是不能触发对象和数据库的同步更新,这就使得linkMan联系人表外键无法自动更新。

再有一点就是在hibernate级联修改中,修改外键时效率不高,在hibernate机制中,是双向维护外键,而双向维护外键会修改两次外键,在修改客户时修改了一次外键,修改联系人时也修改了一次外键,造成性能下降,解决方式让其中一方放弃外键的维护关系,在客户与联系人中,客户是一,联系人是多,让客户放弃维护外键,那么为什么让为一的一方的客户放弃维护外键呢?举个例子:一个国家有总统,国家有很多人,总统与国家的人是一对多的关系,总统无法认识国家的所有人,但是这个国家所有的人可以认识总统,总统放弃了关系维护。


阅读更多
换一批

没有更多推荐了,返回首页