【发布时间】:2018-03-29 19:02:51
【问题描述】:
我目前正在升级我们的应用程序,我们正在从 Hibernate 3.x 和 Spring/Spring Security 3.x 迁移到 Hibernate 5.x 和 Spring/Spring Security 5.x。我们有一些方法可以执行原生 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 注释。
【问题讨论】:
-
您是否正确创建了所有与数据库相关的 bean?
-
@kakabali
javax.persistence.transactionrequiredexception: executing an update/delete query -
尝试使用注释
javax.transaction.Transactional而不是org.springframework.transaction.annotation.Transactional,反之亦然,它适用于某些人 -
您有事务管理吗?如果你在你的方法上使用@Transactional?并尝试删除行
session.close(); -
在@Transactional块中,不需要手动管理Hibernate Session
标签: java spring hibernate spring-data