命名查询未知:findById

时间:2014-08-25 14:31:15

标签: java hibernate named-query

我正在尝试构建这个简单的项目,但我一直遇到同样的错误。任何人都可以帮忙解决这个问题吗?

HibernateTest.java

public class HibernateTest
{
    public static void main(String[] args) 
    {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        UserDetails user = new UserDetails();

        Query query = session.getNamedQuery("findById");

        List<?> list = query.list();
        if (!list.isEmpty())
        { UserDetails userD = (UserDetails) list.get(0);
          System.out.println(userD); }
     }
}

UserDetails.java

package com;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table (name="UserDetails")
@NamedQuery(
        name = "findById",
        query = "SELECT x FROM UserDetails x WHERE x.id = '3'")
public class UserDetails
{
    @Id
    @Column(name="UserID")
    private int id;
    @Column(name="UserName")
    private String name;

    public void setId(int id)
    { this.id = id; }
    public int getId()
    { return id; }

    public void setName(String name) 
    { this.name = name; }
    public String getName()
    { return name; }
}

我不确定是什么问题,因为我在不同的项目中运行相同的查询并且工作正常。

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我通过在applicationContext.xml中添加以下内容来解决问题。

<property name="annotatedClasses">  
              <list>
               <value>com.Employee</value>
               </list>  
               </property>

答案 1 :(得分:0)

如果您使用的是XML配置,则可以使用<query>标记定义命名查询。例如:

<query name = "findById">
    <![CDATA[SELECT x FROM UserDetails x WHERE x.id = '3']]>
</query>

<query>代码与<class>代码位于同一级别,作为<hibernate-mapping>代码的子代。

答案 2 :(得分:0)

虽然这不能解决您当前的问题,但如果您正在使用Hibernate和JPA注释,为什么不使用EntityManager而不是Hibernate会话和东西呢?

使用持久性单元(以及persistence.xml文件夹中的META-INF),您可以这样做:

EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery("findById");

或更好:

TypedQuery<UserDetails> query = em.createNamedQuery("findById", UserDetails.class);

方法大致相同(毕竟,JPA是由Hibernate构成的)。