Java 命名查询未知:findById

Java 命名查询未知:findById,java,hibernate,named-query,Java,Hibernate,Named Query,我试图建立这个简单的项目,但我不断得到相同的错误。有人能帮我弄清楚吗 HibernateTest.java public class HibernateTest { public static void main(String[] args) { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session sessio

我试图建立这个简单的项目,但我不断得到相同的错误。有人能帮我弄清楚吗

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); }
     }
}

我不太清楚到底是什么问题,因为我在不同的项目中运行了相同的查询,并且运行良好。

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

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

com.Employee

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

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


标记与
标记处于同一级别,作为
标记的子标记。

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

使用持久化单元(以及
META-INF
文件夹中的
Persistence.xml
),您可以执行以下操作:

EntityManagerFactory emf = 
Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery("findById");
或者更好:

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

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

您是否验证了您的Hibernate配置是否知道
UserDetails
类?我在Hibernate.cfg.xml中有这个选项,所以。。。您正在使用XML映射而不是注释驱动的映射?!您的
userdetails.hbm.xml
中是否存在命名查询?我没有。我怎么把它放进去?
TypedQuery<UserDetails> query = em.createNamedQuery("findById", UserDetails.class);