我正在尝试构建这个简单的项目,但我一直遇到同样的错误。任何人都可以帮忙解决这个问题吗?
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; }
}
我不确定是什么问题,因为我在不同的项目中运行相同的查询并且工作正常。
答案 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构成的)。