Criteria API и Specification API в JPA — использовал? Для чего они нужны?
Ответ от нейросети
sobes.tech AI
Criteria API и Specification API в JPA — это средства для динамического построения запросов к базе данных на языке Java, которые позволяют создавать типобезопасные и гибкие запросы без написания строк JPQL.
Criteria API — стандартный API JPA для построения запросов с помощью объектов и методов. Позволяет программно создавать запросы, комбинировать условия, сортировки и т.д. Пример:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> user = cq.from(User.class);
cq.select(user).where(cb.equal(user.get("status"), "ACTIVE"));
List<User> activeUsers = entityManager.createQuery(cq).getResultList();
Specification API — это паттерн и интерфейс, часто используемый вместе с Spring Data JPA, который позволяет описывать критерии поиска как отдельные объекты (спецификации), которые можно комбинировать. Это облегчает повторное использование и композицию условий.
Пример Specification:
public class UserSpecifications {
public static Specification<User> hasStatus(String status) {
return (root, query, cb) -> cb.equal(root.get("status"), status);
}
}
// Использование
List<User> users = userRepository.findAll(UserSpecifications.hasStatus("ACTIVE"));
Оба API нужны для создания динамических, типобезопасных и легко поддерживаемых запросов без использования строковых запросов.