命名休眠查询的“命名查询未知”?

Posted

技术标签:

【中文标题】命名休眠查询的“命名查询未知”?【英文标题】:"Named query not known" for named Hibernate query? 【发布时间】:2012-04-21 18:12:32 【问题描述】:

可能是什么问题?

@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

【问题讨论】:

你为什么不只使用 name="User.all"? Eclipse 只能确认常量的使用。因此,如果我使用"User.all" 创建查询,它是一个不会被检查的字符串。使用 User.ALL 如果我拼写错误,会在编译前检查。 你能发布你的 hibernate.cfg.xml/persistence.xml 吗? 打开“hibernate.log”并检查是否出现类似“[org.hibernate.cfg.annotations.QueryBinder] (main:) Binding Named query: User.all => SELECT u FROM User u"... 然后检查你的持久化文件并检查 User 类是否被映射。 这能回答你的问题吗? Named query not known - Annotations & Hibernate 【参考方案1】:

不确定这是否是您的问题,但请查看此帖子 here。

问题在于使用:

org.hibernate.annotations.Entity

代替:

javax.persistence.Entity

【讨论】:

这是一个很好的注意点,但不幸的是,我在 mace 案例中使用了正确的导入。 嗯,值得一试。您是否将 hibernate.cfg.xml 中的类声明为

以上是关于命名休眠查询的“命名查询未知”?的主要内容,如果未能解决你的问题,请参考以下文章

休眠中命名查询的优点?

休眠命名查询

命名查询未知:findById

命名查询休眠

休眠命名查询不知道错误

具有聚合函数的休眠命名查询