我正在使用 Spring 和 Hibernate。我有一个用 @Transactional
注释的方法。该方法有两个数据库调用。一个调用将更新表中的数据,另一个调用将根据第一个调用的更新数据从同一个表中检索一些数据。
问题是第一次调用的数据库更改没有立即反射(reflect)。更改在流程从使用 @Transactional
注释的方法出来后反射(reflect)出来。我仍然尝试调用 session.flush()
但没有用。请推荐我。
@Transactional
public void method1(){
dao.updateM1();
dao.getData();
}
最佳答案
您能详细说明一下您的场景吗?例如:您为 updateM1 和 getData 方法声明了什么传播级别?
如果您没有描述 updateM1 和 getData 方法的事务,问题是这两种方法都在同一个事务中。因此,在事务提交之前,Hibernate 不会更新数据。要解决这个问题,您只需将 updateM1 的事务描述如下:
@Transactional (propagation = Propagation.REQUIRE_NEW)
public E updateM1() {}
这样,每次调用 updateM1 时都会创建一个新事务。当 updateM1 完成时,新事务将被提交,所有更改将保留在数据库中。
关于 session.flush 不起作用,这里有一个明确的答案:Question about Hibernate session.flush()
关于java - spring-hibernate transaction-变化没有反射(reflect)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16462976/