我正在使用Spring和Hibernate。我有一个用@Transactional
注释的方法。此方法有两个数据库调用。一个调用将更新表中的数据,而另一个调用将基于第一个调用的更新数据从同一表中检索一些数据。
问题是首次呼叫的数据库更改没有立即反映出来。流程从用@Transactional
注释的方法出来后反映出来。我仍然尝试调用session.flush()
,但没有用。请给我建议。
@Transactional
public void method1(){
dao.updateM1();
dao.getData();
}
最佳答案
您能详细说明一下您的情况吗?例如:您为updateM1和getData方法声明了什么传播级别?
如果您没有为updateM1和getData方法描述Transactional,则问题在于两种方法都在同一个事务中。结果,在提交事务之前,Hibernate不会更新数据。要解决该问题,只需描述updateM1的事务,如下所示:
@Transactional (propagation = Propagation.REQUIRE_NEW)
public E updateM1() {}
这样,每次调用updateM1时都会创建一个新事务。当updateM1完成时,将提交该新事务,并且所有更改将保留在数据库中。
关于session.flush无法正常工作,这是一个明确的答案:Question about Hibernate session.flush()