JPA:命名查询中的枚举

时间:2014-12-01 16:04:53

标签: java jpa enums named-query

我有一个像这样的实体:

package it.infogroup.vertenze.entities;

import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;

@Entity
@Table(name = "RICHIESTE_ESPORTAZIONE_ISIDORO")
@NamedQueries({
        @NamedQuery(name = "findFlussoDatiGeneraliByStato",
                    query = "select r from RichiestaEsportazioneIsidoro r 
                            where r.stato = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$StatoRichiesta.NEW
                            or r.stato = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$StatoRichiesta.FAIL
                            and r.tipoFlusso = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$TipoFlusso.DATI_GENERALI"),
        @NamedQuery(name = "findFlussoAccantonamentiByStato",
                   query = "select r from RichiestaEsportazioneIsidoro r
                            where r.stato = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$StatoRichiesta.NEW
                            or r.stato = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$StatoRichiesta.FAIL
                            and r.tipoFlusso = it.infogroup.vertenze.entities.
                            RichiestaEsportazioneIsidoro$TipoFlusso.ACCANTONAMENTI")
})
public class RichiestaEsportazioneIsidoro implements Serializable {

 public final static String QUERY_FIND_BY_LOTTO_AND_STATO =
                                                     "findRichiestaByLottoAndStato";

  public enum StatoRichiesta {
    NEW,
    ELAB,
    SENT,
    FAIL
  }

    public enum TipoFlusso {
        DATI_GENERALI,
        ACCANTONAMENTI
    }

部署时我收到此错误:

01/12/2014 16:59 [ERROR]: org.hibernate.impl.SessionFactoryImpl -
                 Error in named query: findFlussoAccantonamentiByStato
                 org.hibernate.hql.ast.QuerySyntaxException:
                 unexpected token: . near line 1, column 167 [select r from
                 it.infogroup.vertenze.entities.RichiestaEsportazioneIsidoro r
                 where r.stato = it.infogroup.vertenze.entities.
                 RichiestaEsportazioneIsidoro$StatoRichiesta.NEW
                 or r.stato = it.infogroup.vertenze.entities.
                 RichiestaEsportazioneIsidoro$StatoRichiesta.FAIL
                 and r.tipoFlusso = it.infogroup.vertenze.entities.
                 RichiestaEsportazioneIsidoro$TipoFlusso.ACCANTONAMENTI]

有人能帮我理解我做错了什么吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

我认为与此hibernate错误https://hibernate.atlassian.net/browse/HHH-8368

有关

您正在使用JPQL保留字NEW作为枚举值。 尝试使用另一个名称new,hibernate无法处理这种情况。

您可以在下面查看JPQL保留字列表。 https://docs.oracle.com/html/E24396_01/ejb3_langref.html#ejb3_langref_from_identifiers