Typesafe在Hibernate中命名为Native Query

时间:2013-08-06 23:17:37

标签: 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)

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

2 个答案:

答案 0 :(得分: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 {
    [...]
}

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

答案 1 :(得分:0)

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

但是,这不是一个非常有用的信息。