我正在处理并发更新处理的东西,我的场景是-一个雇员可以从ui标记为不活动,但如果一旦标记为不活动,就不应该允许它再次标记为不活动。我想通过使用status=active的condition update实体进行db update调用来实现它。我需要更新的实体作为回报。
如何使用条件(where子句)更新实体,并在spring数据jpa的方法响应中获取更新的实体
employeRepository.save(employee); // is it possible to do something like this with a condition at the same time update method returns updated entity.
2条答案
按热度按时间muk1a3rh1#
你在和jpa背道而驰。
我建议你用jpa的方法:
加载实体
如果
status
属性不是inactive
设置为active
.当事务结束时,它将被写入数据库。
如果你坚持使用update语句
您可以使用以下过程:
如果实体是当前会话的一部分:
刷新对数据库的所有更改。
从会话中逐出实体。
使用sql或jpql和where子句执行更新,如下所示:
... WHERE id = :id and status <> 'inactive'
使用id再次加载实体。omvjsjqw2#
您可以使用jpql。
或者只是Spring Data
然而,处理并发查询的一个好方法是乐观锁和
@Version
注解。