0

フィールド「ステータス」の更新時にトリガーを持つデータベーステーブル「MyTable」があります。

以下は、私がやろうとしていることのダミーコードです:

MyTable table = new Mytable();
table.setTableId(1);
table.setStatus ("NEW");
em.persist (table); //At this point the trigger did not kick in since this inserted a new record

...

MyTable table2 = em.find(MyTable.class, 1);
table2.setStatus ("NEW"); 
em.merge(table2)//Even though im updating the record with the same status with the same value, i still want the trigger to kick. However the trigger is not being activated.


...

MyTable table3 = em.find(MyTable.class, 1);
table3.setStatus ("OLD"); 
em.merge(table3)//The trigger is being activated here since the status is different the status value when it was inserted the first time.

簡単に言えば、ステータスが同じであっても、「transfer2」に変更を加えて更新をトリガーするにはどうすればよいですか?

-ありがとう

4

3 に答える 3

1

em.flush();永続化コンテキストを基礎となるデータベースに同期するために使用します。保留中のクエリはデータベースに送信されますが、完全なロールバックを行うことができます。

于 2012-09-18T16:08:56.157 に答える
0

JPAは、変更のないオブジェクトを更新しません。

別のものに変更して(フラッシュ)、元に戻すことができます。

JPQL更新クエリを使用して更新することもできます。

JPAプロバイダーによっては、変更されていないフィールドを強制的に更新することもできますが、これによりパフォーマンスが非常に低下します。

于 2012-09-19T13:56:24.827 に答える
0

マージを使用せずに、エンティティを更新してトランザクションをコミットしてください。

お気に入り

em.getTransaction().begin();
MyTable table2 = em.find(MyTable.class, 1); 
table2.setStatus ("NEW");  

//em.merge(table2)//Even though im updating the record with the same status with the
// same value, i still want the trigger to kick. However the trigger is not being activated.  
em.getTransaction().commit();
于 2012-08-14T11:36:38.410 に答える