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),看看它是否适合你。
我想针对动态模型创建一个 (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),看看它是否适合你。