2014-12-01 4 views
0

У меня есть Entity, как это: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

Это должно сработать, можете ли вы показать, как вы аннотировали поля enum в 'RichiestaEsportazioneIsidoro'? –

+0

Я аннотировал их с помощью '@Enumerated (EnumType.STRING)' –

ответ

3

Я думаю, что связан с этой спящей ошибкой https://hibernate.atlassian.net/browse/HHH-8368

вы используете JPQL зарезервированный слова NEW для значения перечисления. Попробуйте использовать другое имя для нового, спящий режим не может обрабатывать такой случай.

Ниже вы можете проверить список зарезервированных слов JPQL. https://docs.oracle.com/html/E24396_01/ejb3_langref.html#ejb3_langref_from_identifiers

+0

Просто упомянуть, что ваша ссылка «checker» предназначена для SQL-слов NOT для JPQL-ключевых слов (что и является проблемой здесь). –

+0

Спасибо @NeilStockton, отредактируйте, чтобы отразить ваше замечание :) –

Смежные вопросы