是的,我知道问题可能非常广泛,但我不明白JPA锁是如何工作的。
我将举例说明我如何使用它:
public Account deposit(int id, double quantity) {
Account a = super.find(id);
if (a == null) {
return null;
}
try {
em.lock(a, LockModeType.PESSIMISTIC_WRITE);
a.setSaldo(a.getSaldo() + quantity);
LOG.log(Level.INFO, " //\u00a0 Se ha depositado, saldo :{0}", a.getSaldo());
} catch (Exception oe) {
LOG.log(Level.INFO, oe.getMessage());
}
return a;
}
你正在思考"所以?"
好吧,当我应用锁时,下一个语句将更新记录,而不是"合并"指令,但锁定完成后? ,这意味着我可以继续进行更改(即a.setFOO(bar)),直到达到return语句并提交更改?还是我需要另外锁?
AFAIK悲观的写锁定会使SELECT ... FOR UPDATE,但因为我没有" transaction.begin()"我不知道锁的范围。我是通过
注入实体经理@PersistenceContext(unitName = "PruebaConcurrenciaPU")
private EntityManager em;
谢谢!