Typesafe在Hibernate中命名为Native Query

rob*_*lco 10 hibernate jpa

Hibernate版本4.2.3.Final是否支持类型安全的本机命名查询?我得到一个例外:

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)
Run Code Online (Sandbox Code Playgroud)

当我使用Query类执行此查询时,一切都很好.TypedQuery似乎是这里的问题,异常不是很有帮助.我已经尝试过对非常复杂的查询进行简单查询,除非我使用Query查询命名的本机查询,否则它们似乎都会失败.

Jos*_*ero 10

您可以指定SqlResultSetMapping来摆脱此错误.例如:

@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 {
    [...]
}
Run Code Online (Sandbox Code Playgroud)

这样Hibernate知道如何处理本机查询返回的值.