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查询命名的本机查询,否则它们似乎都会失败。
答案 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查询从代码移动到映射文件中时,我遇到了这个问题,但是不小心把它放在一个元素中而不是一个元素中。
但是,这不是一个非常有用的信息。