Sobes.tech
Назад к вопросам
Senior
8

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 нужны для создания динамических, типобезопасных и легко поддерживаемых запросов без использования строковых запросов.