0

次のようにステートレス トランザクション サービスを使用します (つまり、呼び出しごとに新しいセッションとトランザクションを開きます)。

@Transactional
void someService(Object o) {
    Object newO = entityManager.merge(o);
    newO.getChildren().add(something);
}

サービスに渡すオブジェクト o は、切り離されたオブジェクトです。問題は、引数自体を永続化するのではなく、操作する新しいインスタンスmerge(object)を返すことです。したがって、永続オブジェクトに加えた変更は、メモリ内の元のオブジェクトには反映されません。

もちろん、すべてのローカル参照を再配線することもできますが、より良い解決策があることを願っています。

新しいインスタンスを取得する代わりに、ローカル インスタンスをmanagedにする方法はありますか?

試しrefresh(object)てみupdate(object)ましたが、オブジェクトの関連付けがまだ切り離されているため、例外が発生します。

アソシエーションに注釈を付けると@Cascade(value=CascadeType.save-update)正常に動作しますが、OneToMany または ManyToMany アソシエーションが多数ある場合にパフォーマンスの問題が発生しませんか?

4

2 に答える 2

1

Object oを使用するだけで、切り離して使用できると思いますsession.update(o)

このビデオチュートリアルを見てみてください。役に立つかもしれません!

チャオ!

于 2013-10-15T09:15:16.900 に答える