6

Execution と呼ばれる休止状態のエンティティがあります。プロセスの最初に作成され、最後に更新され、プロセスがどのように終了したかを示します。

データベースで選択を行わずに、このエンティティの 1 つのプロパティを更新したいと考えています。

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED);//--> このメソッドを呼び出すと、データベースで SELECT が起動されます。エンティティを更新したいだけです。

これはこのメソッドに固有のものではなく、呼び出された他のメソッドはすべて SELECT 句になります。実際、私のメソッドが呼び出される前でも選択が行われているようです。私の印象では、休止状態のプロキシは、メソッドが呼び出されるたびに選択を開始するために、クラスの引数なしコンストラクター内にコードを配置します。

データベースで SELECT ステートメントを実行せずに JPA/Hibernate エンティティを更新することはできますか?

4

1 に答える 1

1

これがHibernateの仕組みです。そのプロキシオブジェクトは、id以外のプロパティにアクセスするたびに、DBから実際のオブジェクトをロードします。

プロセスの開始時に(それを実行するために)オブジェクトを保存/ロードしてみてSELECT、オブジェクトがタッチされるたびにセッションが自動フラッシュされないことを確認してください(デフォルトの動作は自動フラッシュではないと思いますが、価値がありますチェック)。

または、処理中にオブジェクトをHibernateセッションから切り離してみることもできます。

于 2010-02-25T13:41:18.120 に答える