【发布时间】:2021-03-12 04:32:45
【问题描述】:
我正在解决以下问题,我想实施一个干净的解决方案。
想象一下这个实体图:
一本书有页面,用户可以为每本书添加注释。对于每个注释,用户可以指定注释引用的多个页面。
当我创建一个新结构并尝试保存它时,我得到以下异常:
TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : NoteToBokPage.page -> page",
所以 Hibernate 告诉我先保存页面,然后才能保存 NoteToBookPage。这意味着我不能级联所有项目的保存。 将所有实体设置为 CASCADE.ALL 而不是 NoteToBookPage 然后手动保存 NoteToBookPage 是否是最好的方法?这是个好方法吗?
我的问题是,我的结构实际上更大。书不是根。上面有两层,我的计划是通过触发根元素的更新并级联所有内容,为整个树提供一种更新方法。当使用级联保存所有内容时,它似乎很丑陋,而不是一片叶子,然后手动进行。 是否有可能告诉 Hibernate 在保存 NoteToBookPage 之前必须先在页面上进行保存?我希望当我将 PageList-Attriubte 放在 NoteList-Attribute 上方的 Book-Class 中时它可以工作,但它没有。
任何想法如何处理这个性感的方式?
谢谢
【问题讨论】:
-
我不确定我是否可以遵循,但添加您的实际代码(或重现问题的简化示例)会有所帮助。从理论上讲,JPA 非常简单:您可以使用单个实体,因此应该管理在其他地方使用的所有实体,或者如果您想一次保存整个图形,则使用级联。
标签: hibernate one-to-many hibernate-mapping hibernate-onetomany