2013-08-06 56 views
6

在Hibernate 4.2.3版中支持類型安全的本機命名查詢嗎?我得到這個例外之一:類型安全在休眠中命名本機查詢

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) 

當我用查詢類執行此查詢一切都很好。 TypedQuery似乎是這裏的問題,這個例外不是很有幫助。我已經試過這個簡單的查詢,以非常複雜的查詢,他們似乎都失敗了,除非我使用查詢命名的本地查詢。

回答

8

你可以指定一個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知道如何處理與本地查詢返回的值。

0

我把這個硬編碼的HQL查詢從代碼移動到映射文件中時遇到了這個問題,但是不小心把它放在一個元素中而不是一個。

但是,這不是一個非常有用的信息。