为什么Hibernate要求list-index可以为空?

时间:2016-12-17 01:42:12

标签: java hibernate list orm hibernate-mapping

我有一个类似于以下内容的映射,似乎在index语句期间未填充INSERT列,因为数据库抱怨indexNULL 。但是,如果我将index列设置为可空,则可以按预期工作。

<list name="someList">
    <key column="someFk"/>
    <list-index column="index"/>
    <one-to-many class="SomeClass"/>
</list>

有没有办法强制Hibernate在插入时填充index?我确定必须有办法,但我已经查看了文档但无法找到任何内容。

1 个答案:

答案 0 :(得分:1)

在我的书High-Performance Java Persistence中解释,这种行为可以通过Hibernate flush operation order的棱镜来解释。如果您查看ActionQueue课程,您会看到entity state transitions按以下顺序执行:

  1. OrphanRemovalAction
  2. AbstractEntityInsertAction
  3. EntityUpdateAction
  4. QueuedOperationCollectionAction
  5. CollectionRemoveAction
  6. CollectionUpdateAction
  7. CollectionRecreateAction
  8. EntityDeleteAction
  9. 现在,SQL INSERT语句由AbstractEntityInsertAction执行,而索引是由CollectionRecreateAction通过UPDATE语句分配的。

    虽然我同意删除UPDATE语句并在INSERT上填充列表索引会更有效,但我认为这种改变需要大量的重构工作。您可以为此打开JIRA问题,并将其标记为改进。