2014-12-01 69 views
0

我有一个实体是这样的:JPA:枚举在命名查询

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] 

有人可以帮助我理解我在做什么错? 谢谢。

+0

这应该工作,你可以显示你如何注释'RichiestaEsportazioneIsidoro'中的枚举字段吗? – 2014-12-01 16:13:37

+0

我使用'@Enumerated(EnumType.STRING)'注释了它们' – 2014-12-01 16:18:34

回答

3

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

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

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

+0

只需提及您的“检查器”链接是用于SQL关键字而不用于JPQL关键字(这是什么问题)。 – 2014-12-01 18:21:27

+0

谢谢@NeilStockton,将编辑以反映你的评论:) – 2014-12-01 18:23:32