我一直在努力理解Hibernate的inverse属性,但它似乎是那种概念上比较困难的东西。
我的理解是,当您有一个父实体(例如Parent),该实体使用一对多映射拥有Child对象集合时,将映射上的inverse=true设置告诉Hibernate,“另一侧(Child)有责任更新自身以维护其表中的外键引用”。
这样做似乎在您的代码中向集合添加Children,然后保存Parent(同时设置cascade-all)时有两个好处:您可以节省数据库中不必要的请求(因为如果没有设置inverse,Hibernate认为有两个地方需要更新FK关系),并且根据官方文档:
如果关联的列被声明为NOT NULL,则NHibernate在创建或更新关联时可能会导致约束冲突。为了防止这种问题,您必须使用双向关联,并将具有多个值的端(set或bag)标记为inverse=“true”。
到目前为止,这一切都似乎很有道理。我不明白的是:在什么情况下您不想在一对多关系上使用inverse=true?