1

マップを含むエンティティを保存しようとすると、次の問題が発生します。

これは私のエンティティがどのように見えるかです:

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)

これに関するご意見をお待ちしております。

ありがとう!

4

1 に答える 1

1

同様の問題がありました。私の場合、別のテーブルのレコードを更新するエンティティを使用していました (1 対多の関係がありました - 1 つの「プライマリ」オブジェクトと別のテーブルの「セカンダリ」オブジェクトのリスト)。私が行った設定は、他のテーブルを更新しようとしていました。これは create メソッドと update メソッドではうまくいきましたが、オブジェクトを削除しようとするとBatchedTooManyRowsAffectedException例外が発生しました。結合されたエントリを削除し、それらを別のエンティティの一部として配置することになりました。

あなたの場合、 MyEmbeddable マップの設定、特に結合列を設定する部分をもう一度見てみることをお勧めします。更新で複数のエントリ (したがって複数の行) を削除しようとすると、それが問題の原因である可能性があります。

定義に使用できる XML タグのいくつかを見てください。1 対多のタグのようなものがどこかに必要な場合があります。残念ながら、エンティティに関する私の経験では、明示的な XML ファイルの必要性を回避するために Spring/Hibernate を使用しているため、その点に関してこれ以上アドバイスを提供することはできません。

于 2013-02-14T17:48:25.503 に答える