Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 如何查找分离openjpa实体时加载的字段_Jakarta Ee_Openjpa - Fatal编程技术网

Jakarta ee 如何查找分离openjpa实体时加载的字段

Jakarta ee 如何查找分离openjpa实体时加载的字段,jakarta-ee,openjpa,Jakarta Ee,Openjpa,我正在为我的公司构建一个审计框架,并试图获取在从托管状态中删除实体时与实体分离的字段集合。我需要知道哪些字段被设置为空的客户端-vs-在分离实体时没有加载哪些字段,以便在将其与托管实体进行比较时,我不会盲目地加载整个数据库。该实体有一个@DetachedState字段 有人知道如何将分离的状态值转换为实体上实际加载了哪些字段的映射吗?我在翻阅了一堆OpenJPA代码后设法解决了这个问题。它可能不是最优雅的代码,也没有应该进行的安全检查,但它在这一点上完成了工作 final Persist

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


有人知道如何将分离的状态值转换为实体上实际加载了哪些字段的映射吗?

我在翻阅了一堆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.");
        }
    }

希望这对其他人有帮助

在翻阅了一堆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.");
        }
    }
希望这对其他人有帮助