簡體   English   中英

JPQL:SELECT NEW查詢中的枚舉文字

[英]JPQL: Enum literal in SELECT NEW query

我有幾個域類的描述符類。 描述符類有一個字段'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頁)

  • single_valued_pa​​th_expression
  • scalar_expression
  • aggregate_expression
  • identification_variable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM