首页 新闻 会员 周边 捐助

hibernate事务自动提交的问题。

0
悬赏园豆:10 [待解决问题]

我的问题是:已经在配置文件配置了事务自动提交,save方法有效,为什么执行update还得再手动提交事务?????先来看一下问题的现象

在hibetnate的配置了autocommit为true,如下:

执行save方法的时候没有问题,可以保存到数据库。代码如下:

但是在执行update时,数据库却没有更改成功,代码如下:

在进行了手动提交事务后,数据库才操作成功,

数据库数据:

再次发出疑问:已经在配置文件配置了事务自动提交,save方法有效,为什么执行update还得再手动提交事务?????

小明珠的主页 小明珠 | 初学一级 | 园豆:189
提问于:2018-05-02 09:42
< >
分享
所有回答(2)
0

 

经过同事杨帅哥的解答,对这个问题有了清清晰的认识,如有不准确的地方,请批评指正。现解答如下:因为在配置文件中设置了事务的自动提交为true,所以save方法正确执行。在进行更新和删除。需要先找到某条数据:User u = (User) session.get(User.class, 7),找到的这条数据缓存到了session中,那么接下来的update操作的是缓存中的数据,并没有同步到数据库,所以数据库中的值不变。但是我们再手动开启事务的话,会调用 session.beginTransaction().commit(),

commit方法隐式的调用了flush方法,而flush的作用就是将session的缓存中的数据与数据库同步。所以解决方式也可以是不手动进行事物的提交,直接调用session.flush();

 

小明珠 | 园豆:189 (初学一级) | 2018-05-02 14:26
0

mark

TechMoeTiger | 园豆:36 (初学一级) | 2018-05-05 23:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册