2010-12-20 12 views
1

エンティティに作成および更新タイムスタンプを書き込むために、デフォルトのEntityListeners(preUpdateおよびprePersist)を使用しています。新しい子がコレクション(OneToMany)に追加され、persistが呼び出されると、親レコードがEntityListenerに送信され、タイムスタンプが更新されます。私の問題は、新しい子レコードだけがコレクションに追加された場合、親を更新したくないということです。エンティティが変更されたかどうかを確認する方法はありますか(EntityListerner内)? ありがとう アンドレアスEclipseLink/JPA EntityListener:エンティティが変更されているかどうかをチェック

答えて

0

これはあなたに役立つかもしれません(テストされていませんが、うまくいくと思います)。 イベントはDescriptorEventです。変更を確認するエンティティはobjectです。

UnitOfWorkImpl uow = (UnitOfWorkImpl) event.getSession(); 
    ClassDescriptor descriptor = uow.getDescriptor(object); 

    boolean isNew = uow.isObjectNew(object); 
     if (isNew || descriptor.getObjectChangePolicy().shouldCompareExistingObjectForChange(object, uow, descriptor)) { 
      ObjectChangeSet changes = null; 
      if (isNew) { 
       changes = descriptor.getObjectChangePolicy().calculateChangesForNewObject(object, changeSet, uow, descriptor, true); 
      } else { 
       changes = descriptor.getObjectChangePolicy().calculateChangesForExistingObject(object, changeSet, uow, descriptor, true); 
      } 
    boolean hasChanges = changes.hasChanges(); 
関連する問題