12

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)

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

4

2 回答 2

11

您可以指定一个 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 {
    [...]
}

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

于 2013-08-13T13:19:16.110 回答
0

当我将硬编码的 HQL 查询从代码移动到映射文件中时,我遇到了这个问题,但不小心把它放在一个<sql-query>元素而不是<query>.

但是,是的,这不是一个很有帮助的信息。

于 2017-04-11T13:14:07.187 回答