2012-04-21 103 views
5

可能是什麼問題?命名Hibernate查詢的「命名查詢未知」?

@Entity 
@NamedQueries({ 
    @NamedQuery(name = User.ALL, 
       query = "SELECT u FROM User u") 
}) 

public class User { 
    public static final String ALL = "User.all"; 
} 

public class Service { 
    find... with ... User.ALL 
} 

堆棧跟蹤:

如果
Caused by: org.hibernate.MappingException: Named query not known: User.all 
    at org.hibernate.impl.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:93) 
    at org.hibernate.impl.SessionImpl.getNamedQuery(SessionImpl.java:1407) 
    at $Session_a5ad46cfa25.getNamedQuery(Unknown Source) 
    at $Session_a5ad46cf913.getNamedQuery(Unknown Source) 
    at de.medicshare.dal.HibernateCrudServiceDAO.findUniqueWithNamedQuery(HibernateCrudServiceDAO.java:83) 
    at $CrudServiceDAO_a5ad46cfa19.findUniqueWithNamedQuery(Unknown Source) 
    at $CrudServiceDAO_a5ad46cfa1b.findUniqueWithNamedQuery(Unknown Source) 
    at $CrudServiceDAO_a5ad46cf931.findUniqueWithNamedQuery(Unknown Source) 
    at de.medicshare.pages.Signup.proceedSignup(Signup.java:82) 
    at de.medicshare.pages.Signup.dispatchComponentEvent(Signup.java) 
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:923) 
    at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1106) 
    ... 90 more 
+0

你爲什麼不使用時只需NAME = 「User.all」? – Nurlan 2012-04-21 19:06:31

+0

Eclipse只能確認常量的使用情況。所以,如果我用'「User.all」創建查詢,那麼這是一個不被檢查的字符串。如果我拼寫錯誤,在編譯之前使用'User.ALL'會被檢查。 – membersound 2012-04-21 19:48:40

+1

你可以發佈你的hibernate.cfg.xml/persistence.xml嗎? – 2012-05-25 14:26:34

回答

2

不知道這將是你的問題,但看看這個帖子here

的問題是使用:

org.hibernate.annotations.Entity 

相反的:

javax.persistence.Entity 
+0

這是一個很好的注意事項,但不幸的是,我在梅斯案中使用了正確的導入。 – membersound 2012-06-22 06:51:02

+0

啊,值得一試。你有沒有在你的hibernate.cfg.xml中聲明這個類(擴展名最後可以改變)爲? – 2012-06-24 21:20:56