gpt4 book ai didi

java - 在 Hibernate 5.x 中使用 native 查询(更新查询)执行查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:48 24 4
gpt4 key购买 nike

我目前正在升级我们的应用程序,我们正在从 Hibernate 3.xSpring/Spring Security 3.x 迁移到 Hibernate 5.xSpring/Spring Security 5.x。我们有一些执行 native sql 更新查询的方法(示例 1),但是在升级到 5.x 之后,这些方法开始抛出 TransactionRequiredException: Executing an update/delete query 异常。好吧,我尝试在方法上添加 @Transactional 注释,但它似乎没有帮助。我将分享旧方法和升级方法(示例 2)。

我不明白它为什么不能在新版本上运行,Hibernate 是否改变了他们处理原生 sql 查询的方式?感谢您的回复。

示例 1

public void myTestMethod() {
String sql = "Update myTable set State = 1";
Session session = getSessionFactory().openSession();
Query query = session.createSQLQuery(sql);
query.executeUpdate();
session.close();
}

示例 2

public void myTestMethod() {
String sql = "Update myTable set State = 1";
Session session = sessionFactory.openSession();
Query query = session.createNativeQuery(sql);
query.executeUpdate();
session.close();
}

我在这里做错了什么?如何在不对方法进行太多更改的情况下执行此更新(我们实现了数千种方法)。例2中的sessionFactory注入(inject)了@Inject注解。

最佳答案

尝试在您的方法上使用 @Transactional 并使用 getCurrentSession() 而不是 openSession()

并且您的代码有 session.close() 语句,这不再有意义,因为连接已经关闭并由 spring 管理。尝试删除 session.close() 语句并重试

关于java - 在 Hibernate 5.x 中使用 native 查询(更新查询)执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49536283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com