Hibernate-reactive: 順序付けられた埋め込み可能コレクションから複数の要素を削除する際の例外

作成日 2021年02月22日  ·  7コメント  ·  ソース: hibernate/hibernate-reactive

追加のテストを実行して、 @ OrderColumn #581の変更から最新のリアクティブコレクション永続ロジックを確認します。 flush()中に複数の要素を削除する際に問題が発生しました。

参照: OrderedEmbeddableCollectionTest

例外:[例外0] io.vertx.core.impl.NoStackTraceThrowable:実行するパラメーターの数は、予想されるパラメーターの数= [2]と一致している必要がありますが、実際の数は[3]です。
[例外1] io.vertx.core.VertxException:トランザクションはすでに完了しています

param値のObject []配列が、新しい抽象パーシスターの2番目に削除された要素に対してObject [2]ではなくObject [3]を返しているようです: //github.com/hibernate/hibernate-reactive/blob/ fe9dfbaa07e4b71fe85e949a45ac23c91c26709b / hibernate-reactive-core / src / main / java / org / hibernate / react / persister / collection / impl / ReactiveAbstractCollectionPersister.java#L237

bug

全てのコメント7件

ステップスルーしてそこで何が起こるかを確認できるようにするために、HibernateORMコアでテストを機能させる価値があるかもしれません。

ORMのdeleteRowsでは、 int offset = 1;は変更されません。

Reactiveでは、増分されたindex値に基づいて、オフセットをdeleteRowsParamValues( entry, index+1, id, session )呼び出しに渡します。 ORMでiindexlocoffsetの概念を誤って組み合わせているようです。

i値は、どのコレクションエントリが操作されているかを知るための更新メソッドと挿入メソッドを提供するように見えるため、削除プロセスに関連付けたり使用したりしないでください。

うん、ロジックが間違って移植されているようだ。

index+1"1変更するだけで、ORMロジックが反映されると思います

素晴らしい!

いいキャッチ!

@blafond :すでに修正されているようですので、これを割り当てました

ありがとう、@ blafond

このページは役に立ちましたか?
0 / 5 - 0 評価