You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:29:53