EclipseLink JPA 动态模型和条件查询

EclipseLink JPA Dynamic model and Criteria Query

我想针对动态模型创建一个 (crtieria-) 查询,但我总是遇到异常

No [EntityType] was found for the key class [demo.DynamicResult] in the Metamodel

最后一行

final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

final CriteriaQuery<Tuple> query = criteriaBuilder.createTupleQuery();   
DynamicHelper helper = new DynamicHelper(JpaHelper.getServerSession(emf));
Class<? extends DynamicEntity> rootclass = helper.getType("demo.DynamicResult").getJavaClass();
query.from(rootclass);

使用以下代码生成 DynamicResult

ServerSession serverSession = JpaHelper.getEntityManager(entityManager).getServerSession();
DynamicClassLoader dcl = DynamicClassLoader.lookup(serverSession);
JPADynamicHelper jpaDynamicHelper = new JPADynamicHelper(entityManager);
Class<?> dynamicResult = dcl.createDynamicClass("demo.DynamicResult");

JPADynamicTypeBuilder dynamicResultBuilder = new JPADynamicTypeBuilder(dynamicResult, null, "DynamicResult");

dynamicResultBuilder.addDirectMapping("id", String.class, "id");

        //Some more addDirectMappings ....

dynamicResultBuilder.setPrimaryKeyFields("id");
type = dynamicResultBuilder.getType();
jpaDynamicHelper.addTypes(false, false, type);

我错过了什么? 这种查询是否可行?

此致

您可能遇到了 https://bugs.eclipse.org/bugs/show_bug.cgi?id=429760 错误。将新创建的动态实体元数据复制到当前会话时出现问题。 检查此错误和附加的差异。 jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/dynamic/simple/SimpleQueryTestSuite.java 测试套件包含执行类似操作的测试 - 创建动态实体并在同一事务 (UnitOfWork) 中针对它运行 JPQL 查询。 我会尝试从 https://www.eclipse.org/eclipselink/downloads/nightly.php 构建最新的 2.7.0 或 2.6.1(不要使用 .WAS),看看它是否适合你。