2013-03-04 32 views
1

我正在爲我的公司構建一個審計框架,並試圖獲取從實體中刪除時與實體分離的字段的集合州。我需要知道哪些字段被設置爲空的客戶端-vs-當實體被分離時沒有加載,所以當我將它與託管實體進行比較時,我不只是盲目地加載整個數據庫。該實體具有@DetachedState字段。如何查找openjpa實體分離時加載的字段

有誰知道如何將分離狀態值轉換爲實際上已加載哪些字段的映射?

回答

1

我在通過一堆OpenJPA代碼挖掘之後設法解決了這個問題。它可能不是最優雅的代碼,並沒有在那裏安全檢查,它可能應該,但它在這一點上完成了工作。

final PersistenceCapable pc = ((PersistenceCapable) detachedEntity); 
    final Object[] state = (Object[]) pc.pcGetDetachedState(); 
    final BitSet loadedFieldsOnDetach = (BitSet) state[1]; 

    final OpenJPAEntityManager oem = getEntityManager(); 
    final Broker _broker = ((EntityManagerImpl) oem).getBroker(); 
    final ClassMetaData meta = _broker.getConfiguration().getMetaDataRepositoryInstance() 
      .getMetaData(ImplHelper.getManagedInstance(detachedEntity).getClass(), _broker.getClassLoader(), true); 

    for (final FieldMetaData fmd : meta.getDefinedFields()) { 
     if (loadedFieldsOnDetach.get(fmd.getIndex())) { 
      System.out.println(fmd.getName() + " was loaded on detach."); 
     } 
    } 

希望這可以幫助別人!

相關問題