2013-08-06 20 views
6

Le query denominate native compatibili con il tipo supportate in Hibernate versione 4.2.3.Final? Ottengo questa eccezione con uno:Nome nativo della query nativa in sospensione

java.lang.ArrayIndexOutOfBoundsException: 0 
    at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:637) 
    at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:241) 
    at $Proxy78.createNamedQuery(Unknown Source) 

Quando si esegue questa query con una classe di query tutto va bene. TypedQuery sembra essere il problema qui e l'eccezione non è molto utile. Ho provato questo con query semplici a query molto complesse e sembrano tutti fallire a meno che non ho usato Query per la query nativa con nome.

risposta

8

È possibile specificare un SqlResultSetMapping per eliminare questo errore. Per esempio:

@javax.persistence.Entity 
@javax.persistence.SqlResultSetMapping(
    name = "implicit", entities = 
    @javax.persistence.EntityResult(entityClass = Account.class) 
) 
@javax.persistence.NamedNativeQuery(
     name = "findAccount", 
     query = "SELECT a.* FROM account a WHERE a.account_id=?1", 
     resultSetMapping = "implicit") 
public class Account implements java.io.Serializable { 
    [...] 
} 

In questo modo Hibernate sa come trattare con i valori che le query restituisce nativi.

0

Ho avuto questo problema quando ho spostato una query HQL con codifica hard dal codice nel file di mapping, ma inserendolo accidentalmente in un elemento anziché a.

Ma sì, quello non è un messaggio molto utile.

Problemi correlati