gpt4 book ai didi

java - 如何使用where子句更新Spring Data JPA中的表

转载 作者:行者123 更新时间:2023-12-01 17:46:18 25 4
gpt4 key购买 nike

我想更新表中的特定记录,并且我使用主键(empId)和另一列(empSalary)来标识特定列。我们知道主键(empId)足以识别记录。但就我而言,如果该员工工资为 1000,我想更新记录。是否有任何选项可以使用实体而不是查询来更新记录?我正在使用 Spring Data JPA

示例:

public class Employee {

@Id
@Column
private int empId;

@Column
private String name;

@Column
private float salary;

@Column
private String state;

// getters, setters
}

如果 empId 和薪资与表匹配,我想更新整个表。

最佳答案

EmployeeRepository中创建以下方法;

findOneByEmpIdAndSalary(Integer empId, Float salary);

然后你可以通过salary = 1000.0或者可以在同一存储库中创建默认方法并对该值进行硬编码;

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

Optional<Employee> findOneByEmpIdAndSalary(Integer empId, Float salary);

default Optional<Employee> findOneByEmpIdAndSalaryEqualTo1000(Integer empId) {
return findOneByEmpIdAndSalary(empId, 1000.0);
}
}

我用过findOne因为您已经使用主键加上额外条件进行选择,所以您要么得到一个,要么没有,因此使用 Optional<T>结果,以更好的方式控制这两种可能性。

@Transactional 中获取此实体后状态,只需更新结果实体。如果Optional不为空,则事务结束时会将更新提交到数据库,否则什么也不做。

@Transactional
public String updateWithCondition(Integer empId) {
employeeRepository.findOneByEmpIdAndSalaryEqualTo1000(empId)
.ifPresent(employee -> employee.setState("desired Update"));
}

以上面的代码片段为例。

关于java - 如何使用where子句更新Spring Data JPA中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com