Поскольку данные пружины 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);
Теперь я хочу выполнить операцию обновления, используя критерии обновления в данных пружины 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 не может быть преобразован в предикат простой способ реализовать CriteriaUpdate, а затем напрямую передать экземпляр в метод Repository, как в операции Get, у нас есть метод findAll()
?
или есть какой-либо другой лучший способ для реализации critUUpdate весной Data JPA?