1
我正在爲我的公司構建一個審計框架,並試圖獲取從實體中刪除時與實體分離的字段的集合州。我需要知道哪些字段被設置爲空的客戶端-vs-當實體被分離時沒有加載,所以當我將它與託管實體進行比較時,我不只是盲目地加載整個數據庫。該實體具有@DetachedState字段。如何查找openjpa實體分離時加載的字段
有誰知道如何將分離狀態值轉換爲實際上已加載哪些字段的映射?
我正在爲我的公司構建一個審計框架,並試圖獲取從實體中刪除時與實體分離的字段的集合州。我需要知道哪些字段被設置爲空的客戶端-vs-當實體被分離時沒有加載,所以當我將它與託管實體進行比較時,我不只是盲目地加載整個數據庫。該實體具有@DetachedState字段。如何查找openjpa實體分離時加載的字段
有誰知道如何將分離狀態值轉換爲實際上已加載哪些字段的映射?
我在通過一堆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.");
}
}
希望這可以幫助別人!