SpringBoot2迁移至SpringBoot3(Java17):createSQLQuery方法报错求替代方案
解决SpringBoot3中Session.createSQLQuery()方法报错的替代方案
SpringBoot3默认集成Hibernate 6.x版本,createSQLQuery()方法在Hibernate 5.x已被标记为过时,到6.x版本直接被移除,因此会出现方法未定义的报错。以下是可行的替代方案:
方案1:使用Session.createNativeQuery()(直接替代)
这是官方指定的替代方法,用法与原createSQLQuery()一致,支持原生SQL查询。
修正后的代码示例:
Session session = sessionFactory.openSession(); session.beginTransaction(); String cmsLegacyLessonContent; // 注意SQL语句需用字符串引号包裹,原代码存在语法问题需修正 Query<?> cmsLegacyContent = session.createNativeQuery("SELECT * FROM Dual");
方案2:使用EntityManager(推荐的规范写法)
如果项目逐步向JPA规范靠拢,建议使用EntityManager执行原生SQL,更符合现代Spring Boot开发模式:
示例代码:
@Autowired private EntityManager entityManager; // 执行原生SQL查询 Query<?> query = entityManager.createNativeQuery("SELECT * FROM Dual"); List<?> result = query.getResultList();
额外注意事项
- 原代码中
Select * from Dual缺少字符串引号,属于语法错误,必须修正为带引号的字符串。 - 若需将查询结果映射到实体类,可在
createNativeQuery()中指定实体类型:Query<YourEntity> query = session.createNativeQuery("SELECT * FROM your_table", YourEntity.class); List<YourEntity> result = query.getResultList();
内容的提问来源于stack exchange,提问作者Devendra Ojha
相关产品推荐
相关产品推荐

