假设我有具有以下签名的方法
Object getData(int id) {
//create a entity manager
//get data frm db
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager
//start transcation tx
//update
//commit tx
}
现在会导致并发问题吗?在最坏的情况下数据会陈旧吗?例如。
如果我getData
当我更新时,如果有人更新数据,我的updateData
会有陈旧的数据吗?
现在我可以使用以下内容:我能解决问题吗?
Object getData(int id,Entitymanager em) {
//get data frm db using em
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager em
//start transcation tx
//getdata using getData(id,em)
//commit tx
}
是的,这可能会发生。
如果您获得一个实体(版本1),其他人修改了它(创建版本2),然后您修改版本1并保存它,版本2中的任何更改都将丢失。
要阻止这种情况发生,请通过向实体添加 @Version 属性来使用乐观并发。如果在获取和更新之间发生了提交,则会抛出异常。此时您可以选择最好的选择来处理它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)