java - JPQL:SELECT NEW 查询中的枚举文字

标签 java jpa eclipselink jpql

我有一个用于几个域类的描述符类。描述符类有一个字段“type”,它是一个枚举,表示域类的类型。在某些查询中,我想返回一个或多个描述符并将类型作为构造函数参数传递。所以我的想法是将它作为查询参数传递:

  String jpql = "SELECT NEW model.ModelDescriptor"
    + "(t.id, t.name, t.description, :modelType) ... ";
  TypedQuery<ModelDescriptor> query = em.createQuery(jpql, ModelDescriptor.class);
  query.setParameter("modelType", ModelType.forClass(clazz));
  List<ModelDescriptor> list = query.getResultList();

这是行不通的。没有抛出异常,但结果中的类型为 null。也无法将枚举文字传递给查询:

  "SELECT NEW model.ModelDescriptor (f.id, f.name, f.description,   
    model.ModelType.FLOW) ... "

编辑 我得到以下堆栈跟踪:

  java.lang.IllegalArgumentException: An exception occurred while creating a query in 
  EntityManager: 
  Exception Description: Error compiling the query [SELECT model.ModelDescriptor(f.id,
  f.name, f.description, model.ModelType.FLOW) FROM Flow f WHERE flow.id = :flowId], 
  line 1, column 78: unknown identification variable [model]. The FROM clause of the
  query does not declare an identification variable [model].
  at org.eclipse.persistence.internal.jpa.EntityManagerImpl.
         createQuery(EntityManagerImpl.java:1477)
  at org.eclipse.persistence.internal.jpa.EntityManagerImpl.
          createQuery(EntityManagerImpl.java:1497)

我使用 EclipseLink 作为持久性框架。

有没有办法将枚举文字传递给 SELECT NEW 表达式?

最佳答案

不,没有,一般来说,没有办法引用任何类中的字段,也不可能将参数传递给 SELECT 子句。只有构造函数表达式的有效参数是(来自 JPA 2.0 规范,第 174 页)

  • 单值路径表达式
  • 标量表达式
  • 聚合表达式
  • identification_variable

关于java - JPQL:SELECT NEW 查询中的枚举文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503845/

相关文章:

java - 使用有限的内存构建和导出非常大的树结构

java - SINGLE_TABLE @Inheritance 不继承的 EclipseLink JPA 问题

java - 通过某些组件名称模式将组件/类加载到 ArrayList 中

java - 资源$NotFoundException MenuItemImpl

java - ClassCastExceptions 由于在 WebSphere 8.5.5 应用程序容器中升级到 hibernate 4.2.8

java - 如何在 Java 中的通用方法中创建安全的 createQuery?

java - JPA 多对二关系

java - 如何在 jersey/hk2 应用程序中正确配置 EntityManager?

java - EclipseLink JPA2 Criteria 查询准备语句

java - EclipseLink JPA 中的 CASCADETYPE