0

オブジェクトの保存時にオブジェクトのプロパティを null に設定するために、Hibernate インターセプター (EmptyInterceptor を拡張) を実装し、onFlushDirtyメソッドを実装しました。コードは次のようになります。

public boolean onFlushDirty(...) {
// looking for the property index
int i = 0;
for (i=0; i<propertyNames.length; i++) {
  if ("someProperty".equals(propertyNames[i])) {
    break;
  }
}

// setting it to null
currentState[i] = null;

残念ながら、オブジェクトを無効にしても、レコードはデータベースに保存されたままです。奇妙なことに、そのオブジェクトを変更すると、変更がデータベースに保存されます。

オブジェクトとプロパティの両方がエンティティです。

4

2 に答える 2

0

問題は、インターセプターが実行される前であってもエンティティが db に保存されることにありました。これはエンティティであり、休止状態が別のエンティティで参照できるようになる前に保存する必要があるためです。

于 2012-10-01T20:25:32.530 に答える
0

この状況でインターセプターが呼び出されていないことは確かです...

データを永続化しながらこれを試してみてください...

session.evict(entity);
session.update(entity);

そして調査結果を投稿します。これにより、休止状態が強制的onFlushDirtyに呼び出されます。

また、@OverrideアノテーションonFlushDirtyが適切にオーバーライドされていることを確認してください。

于 2012-08-17T17:42:34.120 に答える