当我尝试存储包含地图的实体时,我遇到以下问题。
这就是我的实体的样子:
public Class MyEntity {
private Map<EnumType, MyEmbedabble> map;
.....
这是orm.xml文件中的相关部分:
<element-collection name="map" target-class="my.package.MyEmbedabble">
<map-key-enumerated>STRING</map-key-enumerated>
<map-key-column name="map_key"/>
<collection-table>
<join-column name="entityId"/>
</collection-table>
</element-collection>
当我存储一个实体对象时它工作得很好但是我注意到当我再次存储该对象时,元素集合中表中的条目会多次出现。一旦发生这种情况,我尝试编辑并保存现有的地图条目,我得到以下异常:
Caused by: org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 5; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:89)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:73)
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:57)
at org.hibernate.persister.collection.BasicCollectionPersister.doUpdateRows(BasicCollectionPersister.java:258)
at org.hibernate.persister.collection.AbstractCollectionPersister.updateRows(AbstractCollectionPersister.java:1630)
at org.hibernate.action.internal.CollectionUpdateAction.execute(CollectionUpdateAction.java:85)
我非常感谢您的任何意见!
谢谢!
答案 0 :(得分:1)
我有类似的问题。就我而言,我正在使用一个实体来更新另一个表中的记录(我有一对多的关系 - 一个“主”对象和一个单独表中的“辅助”对象列表)。我的设置是尝试更新另一个表。这在创建和更新方法上运行良好,但是当我尝试删除对象时,我得到了BatchedTooManyRowsAffectedException
异常。我最终删除了已加入的条目,并将它们作为单独实体的一部分。
在您的情况下,我建议您再次查看MyEmbeddable地图的设置,特别是您设置连接列的部分。如果您的更新尝试删除多个条目(因此多个行),则可能是问题的根源。
查看您定义的一些可用XML标记 - 您可能需要在某处使用类似一对多标记的内容。不幸的是,我对实体的经验使用Spring / Hibernate来绕过对显式XML文件的需求,因此我无法在这方面提供任何进一步的建议。