2013-08-06 39 views
6

Các truy vấn có nguồn gốc an toàn kiểu được hỗ trợ trong phiên bản Hibernate 4.2.3.Final? Tôi nhận ngoại lệ này với một:Truy vấn gốc được đặt tên theo kiểu trong Hibernate

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) 

Khi tôi thực hiện truy vấn này với lớp truy vấn tất cả đều ổn. TypedQuery có vẻ là vấn đề ở đây và ngoại lệ không phải là rất hữu ích. Tôi đã thử điều này với các truy vấn đơn giản cho các truy vấn rất phức tạp và tất cả chúng dường như không thành công trừ khi tôi sử dụng truy vấn cho truy vấn gốc có tên.

Trả lời

8

Bạn có thể chỉ định SqlResultSetMapping để loại bỏ lỗi này. Ví dụ:

@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 { 
    [...] 
} 

Cách này Hibernate biết cách xử lý các giá trị mà truy vấn gốc trả về.

0

Tôi gặp sự cố này khi tôi di chuyển truy vấn HQL được mã hóa cứng từ mã vào tệp ánh xạ, nhưng vô tình đặt nó vào phần tử thay vì a.

Nhưng có, đó không phải là một thông điệp rất hữu ích.

Các vấn đề liên quan