Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typesafe Named Native Query in Hibernate

Tags:

hibernate

jpa

Are type-safe native named queries supported in Hibernate version 4.2.3.Final? I get this exception with one:

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)

When I perform this query with a Query class all is fine. TypedQuery seems to be the issue here and the exception is not very helpful. I've tried this with simple queries to very complex queries and they all seem to fail unless I used Query for the named native query.

like image 487
robert_difalco Avatar asked Aug 06 '13 23:08

robert_difalco


1 Answers

You could specify a SqlResultSetMapping to get rid of this error. For example:

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

This way Hibernate knows how to deal with the values that the native query returns.

like image 169
Josep Panadero Avatar answered Sep 28 '22 02:09

Josep Panadero