spring-hibernate事务 - 更改不反映?
我正在使用Spring和Hibernate。我有一个注释为@Transactional
的方法。此方法有两个数据库调用。一次调用将更新表中的数据,另一次调用将根据第一次调用的更新数据从同一表中检索一些数据。 问题是第一次调用的数据库更改没有立即反映出来。在用@Transactional
注释的方法流出之后,会反映更改。我仍然尝试拨打session.flush()
但没有用。请建议我。spring-hibernate事务 - 更改不反映?
@Transactional
public void method1(){
dao.updateM1();
dao.getData();
}
据我所知在交易方法完成后,只有变化会反映在数据库中。
但是,您在此方法完成之前调用。因此,您没有得到更新的结果。
据我所知,当你使用@Transaction
注解的方法。在方法调用结束时,应该在您的主体逻辑中更改任何数据库更改。
为什么数据库中更新的内容很重要?
想想实体在持久化上下文中的状态。
也许你应该试试session.refresh()
刷新实体的状态,但是你的代码不够详细,看看为什么它不起作用。
您的update
和get
方法是如何实施的?
你能详细说明你的情况吗?例如:你声明什么传播级别为updateM1和getData方法?
在情况下,你没有说明交易的updateM1,并的getData方法,问题是这两种方法都是在一个相同的事务。因此,直到事务提交之前,Hibernate才会更新数据。为了解决这个问题,你刚才描述的交易,如下面updateM1:
@Transactional (propagation = Propagation.REQUIRE_NEW)
public E updateM1() {}
就这样,一个新的交易将创建的每个updateM1被调用时。 updateM1完成后,该新事务将被提交,并且所有更改都将保留在数据库中。
关于调用Session.flush不工作,这里是一个明确的答案:Question about Hibernate session.flush()
它不建议手动调用session.flush()
,我想你可以使用DAO到两个不同的服务方法的两个电话分开,使他们有不同的交易传播属性,
@Transactional
public void method1(){
this.updateM1Service();
this.getDataService();
}
@Transactional (propagation = Propagation.REQUIRE_NEW)
public void updateM1Service(){
dao.updateM1();
}
@Transactional
public void getDataService(){
dao.getData();
}
@ user755806您是否了解问题 – PSR 2013-05-09 13:36:33