命名查询未知:findById
Posted
技术标签:
【中文标题】命名查询未知:findById【英文标题】:Named query not known: findById 【发布时间】:2014-08-25 14:31:15 【问题描述】:我正在尝试构建这个简单的项目,但我不断收到同样的错误。谁能帮忙解决一下?
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;
我不确定出了什么问题,因为我在不同的项目中运行了相同的查询并且它运行良好。
【问题讨论】:
您是否已验证您的 Hibernate 配置知道UserDetails
类?
我的 hibernate.cfg.xml 中有这个 userdetails.hbm.xml
中?
我没有。我怎么把它放进去?
【参考方案1】:
我遇到了同样的问题,我通过在applicationContext.xml
中添加以下内容解决了这个问题。
<property name="annotatedClasses">
<list>
<value>com.Employee</value>
</list>
</property>
【讨论】:
【参考方案2】:如果您使用 XML 配置,则可以使用 <query>
标记定义命名查询。例如:
<query name = "findById">
<![CDATA[SELECT x FROM UserDetails x WHERE x.id = '3']]>
</query>
<query>
标记与<class>
标记处于同一级别,作为<hibernate-mapping>
标记的子级。
【讨论】:
【参考方案3】:虽然这不能解决您的直接问题,但如果您使用的是 Hibernate 和 JPA 注释,为什么不使用 EntityManager 代替 Hibernate 会话和其他东西?
使用 Persistence Unit(以及您的 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);
方法大致相同(毕竟JPA是用Hibernate做的)。
【讨论】:
以上是关于命名查询未知:findById的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.MappingException 命名查询未知
为啥不能修改 Mongoose 查询返回的数据(例如:findById)
spring data jpa使用repository进行查询,使用userRepository.getOne(id)和userRepository.findById(id)无法从数据库查询到数据