JPQL: Enum литерал в запросе SELECT NEW

У меня есть класс дескриптора для нескольких доменных классов. Класс дескриптора имеет поле '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) ... "

edit. Я получаю следующий стек-трейс:

  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 в качестве persistence framework.

Есть ли способ передать литерал перечисления в выражение SELECT NEW?

6
задан Michael 15 December 2011 в 08:33
поделиться