Hibernate抛出java.lang.NoSuchMethodError: Session.createQuery问题求助
解决Hibernate 5.x中
createQuery()方法找不到的问题 你在Hibernate 5.2.11版本里碰到的createQuery()方法不存在的问题,我帮你梳理下常见原因和解决办法:
1. 确认Session的正确导入
Hibernate 5.x里createQuery()方法是定义在org.hibernate.Session接口中的,如果你误导入了JPA的javax.persistence.EntityManager或者旧的Hibernate Session实现,肯定会找不到这个方法。检查你的导入语句:
// 正确的导入 import org.hibernate.Session; // 错误的导入(会导致找不到createQuery) // import javax.persistence.EntityManager;
2. 确保Session的获取方式正确
要从Hibernate的SessionFactory获取Session,而不是JPA的EntityManagerFactory:
// 正确的Session获取示例 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession();
3. 规范HQL语句与Query调用
虽然你已经导入了org.hibernate.query.Query,还要注意createQuery()的调用格式和HQL语法:
- HQL里的
FROM关键字要对应实体类名(不是数据库表名) - Hibernate 5.x的
createQuery()支持泛型,建议指定实体类型避免强制转换
// 正确的HQL调用示例,替换成你的实体类名 String hql = "FROM User"; Query<User> query = session.createQuery(hql, User.class); List<User> resultList = query.list();
4. 检查项目依赖完整性
如果依赖缺失也会导致方法找不到,确保你的构建文件里包含了正确的Hibernate Core依赖:
<!-- Maven依赖示例 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.11.Final</version> </dependency>
5. 清理Eclipse项目缓存
有时候Eclipse的缓存会导致类路径识别错误,可以尝试:
- 右键项目 →
Maven→Update Project(Maven项目) - 右键项目 →
Refresh - 菜单栏
Project→Clean...清理项目
如果以上步骤都试过仍有问题,可以贴出你的代码片段,我再帮你排查具体问题~
内容的提问来源于stack exchange,提问作者Kedar Udupa
相关产品推荐
相关产品推荐

