2013-08-06 22 views
6

Sind typsichere native Abfragen in Hibernate Version 4.2.3.Final unterstützt? Ich bekomme diese Ausnahme mit einem:Typesafe Benannte systemeigene Abfrage im Ruhezustand

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) 

Wenn ich diese Abfrage mit einer Query-Klasse ausführen, ist alles in Ordnung. TypedQuery scheint hier das Problem zu sein, und die Ausnahme ist nicht sehr hilfreich. Ich habe dies mit einfachen Abfragen für sehr komplexe Abfragen versucht, und alle scheinen zu versagen, wenn ich nicht Query für die benannte native Abfrage verwendet habe.

Antwort

8

Sie könnten ein SqlResultSetMapping angeben, um diesen Fehler zu beheben. Zum Beispiel:

@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 { 
    [...] 
} 

Auf diese Weise Hibernate weiß, wie mit den Werten, die die native Abfrage kehrt zu beschäftigen.

0

Ich hatte dieses Problem, als ich eine hartcodierte HQL-Abfrage aus dem Code in die Mapping-Datei verschoben, aber versehentlich in ein Element anstelle von a.

Aber ja, das ist keine sehr hilfreiche Nachricht.

Verwandte Themen