2014-12-01 99 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