【问题标题】:How can I find the fields that were loaded when an openjpa entity was detached如何找到分离 openjpa 实体时加载的字段
【发布时间】:2013-02-18 20:16:38
【问题描述】:

我正在为我的公司构建一个审计框架,并试图获取从托管状态中删除时与实体一起分离的字段集合。我需要知道哪些字段设置为空客户端 -vs- 在实体分离时未加载,因此当我将其与托管实体进行比较时,我不会盲目地加载整个数据库。该实体有一个@DetachedState 字段。

有谁知道如何将 Detached State 值转换为实体上实际加载了哪些字段的映射?

【问题讨论】:

    标签: jakarta-ee 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.");
            }
        }
    

    希望这对其他人有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多