java—如何使用条件(where子句)更新实体,并在SpringDataJPA的方法响应中获取更新的实体

cbeh67ev  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(287)

我正在处理并发更新处理的东西,我的场景是-一个雇员可以从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.
muk1a3rh

muk1a3rh1#

你在和jpa背道而驰。
我建议你用jpa的方法:
加载实体
如果 status 属性不是 inactive 设置为 active .
当事务结束时,它将被写入数据库。
如果你坚持使用update语句
您可以使用以下过程:
如果实体是当前会话的一部分:
刷新对数据库的所有更改。
从会话中逐出实体。
使用sql或jpql和where子句执行更新,如下所示: ... WHERE id = :id and status <> 'inactive' 使用id再次加载实体。

omvjsjqw

omvjsjqw2#

您可以使用jpql。

uery query = entityManager.createQuery(
            "UPDATE employee SET status = \"inactive\"" +
                    "WHERE status=\"active\"");
    query.executeUpdate();

或者只是Spring Data

@Modifying
@Query("update employee u status = `inactive` where status=`active` and ...")
void disableUsers(...);

然而,处理并发查询的一个好方法是乐观锁和 @Version 注解。

相关问题