hibernate 的事务传播容易出现的问题
程序员文章站
2022-07-11 17:39:06
...
hibernate 的事务传播容易出现的问题
先说下我们遇到的问题:
(1)get出来一个对象,修改其成员变量,
结果触发了自动更新(向数据库发送一条update指令),
其实根本没有调用update 方法
(2)对于持久态的对象,显示调用update,结果没有更新
第一个问题解决方法:
(a)把事务设置为只读
第二个问题的解决 方法:
把修改的dao方法的事务传播类型改为: REQUIRES_NEW
getXXX就算使用REQUIRES_NEW 也没有用.
updateXXX就算使用REQUIRES_NEW 也没有用.
最佳实践
(1)对于只读的逻辑,比如查询数据用于前端展现,则建议使用只读事务;
(2)接口的职责要单一,要么仅查询,展现,要么修改.
不要出现一个dao方法中既有查询又有修改的
(3)所有的update逻辑一定要放在事务中,一定要被事务管理,
否则导致没有更新数据库
(4)推荐实体类的关联关系尽量使用懒加载,lazy,即
@ManyToMany(fetch = FetchType.LAZY)
推荐阅读:
https://juejin.im/post/5aa148126fb9a028d4442a46
https://blog.csdn.net/VipMao/article/details/51517658
https://www.cnblogs.com/leotsai/p/hibernate-transaction-session-flush-commit-rollback.html
上一篇: Log4j基本使用方法
下一篇: Linux用户与用户组