2013-05-10 104 views
0

解決我已經添加了新的命名查詢:JPA命名查詢不能與Hibernate

@Entity(name = "books") 
@NamedQueries({ 
     @NamedQuery(name = "books.findByCategoryId", 
       query = "SELECT DISTINCT b.* FROM books b WHERE b.categoryId =:categoryId") 
}) 
public class Book implements Serializable { 

我使用Hibernate的DAO實現:

@Override 
    public Set<Book> findByCategory(Long categoryId) { 
     return new LinkedHashSet<Book>(sessionFactory.getCurrentSession(). 
       getNamedQuery("books.findByCategoryId"). 
       setParameter("categoryId", categoryId).list()); 
    } 

出於某種原因,在IDE我看到:無法解析查詢「 books.findByCategoryId」。 當我開始我得到了應用:

may 10, 2013 6:55:05 PM org.apache.catalina.core.StandardContext loadOnStartup 
SEVERE: Servlet /SpringWebFlow threw load() exception 
org.hibernate.HibernateException: Errors in named queries: books.findByCategoryId 
     at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:528) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798) 

回答

1

Hibernate的錯誤:「Errors in named queries: books.findByCategoryId」意味着你必須與查詢語法問題。來自IDE的消息有點誤導。正如@Piotr指出的,在查詢中將「b。*」更改爲「b」。

The Hibernate Query Language沒有提到通配符。