Java 如何在sping数据JPA中使用CriteriaUpdate执行更新操作?

Java 如何在sping数据JPA中使用CriteriaUpdate执行更新操作?,java,jpa,spring-data-jpa,spring-data,criteria-api,Java,Jpa,Spring Data Jpa,Spring Data,Criteria Api,作为spring数据,JPA提供规范以获得如下结果 public static Specification<Customer> customerHasBirthday() { return new Specification<Customer> { public Predicate toPredicate(Root<T> root, CriteriaQuery query, CriteriaBuilder cb) {

作为spring数据,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);
        }
    };
}
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转换为谓词

SpringDataJPA是否提供了实现CriteriaUpdate然后直接将实例传递给存储库方法的简单方法,就像我们在Get操作中使用的
findAll()
方法一样

或者有没有其他最好的方法在spring Data JPA中实现criteriaUpdate?

基于此,您可以这样做:

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();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaUpdate q=cb.createCriteriaUpdate(Customer.class);
Root=q.from(Customer.class);
q、 set(root.get(“name”),“newName”)
其中(cb.greaterThanOrEqualTo(root.get(“id”),2));
int result=em.createQuery(q).executeUpdate();
基于此,您可以这样做:

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();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaUpdate q=cb.createCriteriaUpdate(Customer.class);
Root=q.from(Customer.class);
q、 set(root.get(“name”),“newName”)
其中(cb.greaterThanOrEqualTo(root.get(“id”),2));
int result=em.createQuery(q).executeUpdate();

您看到这个答案了吗?您可以使用
entityManager.createQuery(update)
pls执行此操作,请不要对非引用段落使用引用格式。我帮你更正了。你看到这个答案了吗?您可以使用
entityManager.createQuery(update)
pls执行此操作,请不要对非引用段落使用引用格式。我帮你改正了。