为什么JPQL修改查询只能返回void或int?

问题描述 投票:0回答:1

[当我想通过JPQL修改数据库时,我必须将查询标记为TransactionalModiyfing。如果我这样做,则表示查询的方法的返回类型必须为voidint(表示我认为已编辑的行数)。为什么只允许两种返回类型?如果我执行HTTP-PUT请求并使用自己的JPQL查询更新对象,我想再次返回更新后的对象。如果查询的返回类型必须为voidint,最好的方法是什么?我是否必须再次执行单独的查询/请求,以便在更新对象后选择对象?

spring jpql
1个回答
0
投票

因为最终归结为在数据库中执行标准UPDATE SQL,而标准SQL中的UPDATE仅返回要更新的记录数,而不返回结果集。

是,如果您需要在更新后获取记录的值,则必须再次查询它。另外,您应该考虑使用JPA方法来更新记录,这是首先查询对象,然后通过更改其状态来更新它。类似于以下内容:(假设您正在使用spring @Transactional管理事务边界)

@Transactional
public void changeEmployeeSalary(Integer employeeId , Integer salary){
    Employee employee = entityManager.find(Employee.class , employeeId);
    employee.setSalary(salary);
}

这样,您无需在更新记录后再次查询记录,也不需要手动编写UPDATE SQL。

© www.soinside.com 2019 - 2024. All rights reserved.