hibernate 的事务传播容易出现的问题

 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

猜你喜欢

转载自hw1287789687.iteye.com/blog/2424893