gpt4 book ai didi

java - 如何在Spring Data JPA中使用CriteriaUpdate执行更新操作?

转载 作者:行者123 更新时间:2023-12-01 18:43:52 29 4
gpt4 key购买 nike

由于 Spring Data JPA 提供了获取如下结果的规范

public static Specification<Customer> customerHasBirthday() {
return new Specification<Customer> {
public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {
return cb.equal(root.get(Customer_.birthday), today);
}
};
}

然后我们可以在存储库方法中传递上述规范customerRepository.findAll(customerHasBirthday);现在我想使用Spring Data JPA中的标准更新执行更新操作,如下所示

public static Specification<Customer> upadteCustomerName() {
return new Specification<Customer> {
public Predicate toPredicate(Root<Customer> root, CriteriaQuery query, CriteriaBuilder cb) {
CriteriaUpdate<Customer> update = cb.createCriteriaUpdate(Customer.class)
update.set("name", "newName");
return update.where(cb.greaterThanOrEqualTo(root.get("id"), 2));
}
};
}

显然我会得到编译时错误

CriteriaUpdate can not be converted into predicate

Spring Data JPA 是否提供了任何简单的方法来实现 CriteriaUpdate,然后直接将实例传递给 Repository 方法,就像在 Get 操作中我们有 findAll() 方法一样?

或者还有其他最好的方法来在 Spring Data JPA 中实现 criteriaUpdate 吗?

最佳答案

基于 this answer 你可以这样做:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaUpdate<Customer> q = cb.createCriteriaUpdate(Customer.class);
Root<Customer> root = q.from(Customer.class);
q.set(root.get("name"), "newName")
.where(cb.greaterThanOrEqualTo(root.get("id"), 2));

int result = em.createQuery(q).executeUpdate();

关于java - 如何在Spring Data JPA中使用CriteriaUpdate执行更新操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874116/

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