我有一个类似于以下内容的映射,似乎在index
语句期间未填充INSERT
列,因为数据库抱怨index
为NULL
。但是,如果我将index
列设置为可空,则可以按预期工作。
<list name="someList">
<key column="someFk"/>
<list-index column="index"/>
<one-to-many class="SomeClass"/>
</list>
有没有办法强制Hibernate在插入时填充index
?我确定必须有办法,但我已经查看了文档但无法找到任何内容。
答案 0 :(得分:1)
在我的书High-Performance Java Persistence中解释,这种行为可以通过Hibernate flush operation order的棱镜来解释。如果您查看ActionQueue
课程,您会看到entity state transitions按以下顺序执行:
现在,SQL INSERT语句由AbstractEntityInsertAction
执行,而索引是由CollectionRecreateAction
通过UPDATE语句分配的。
虽然我同意删除UPDATE语句并在INSERT上填充列表索引会更有效,但我认为这种改变需要大量的重构工作。您可以为此打开JIRA问题,并将其标记为改进。