Criteria API устарел, как вместо этого преобразовать CriteriaQuery? - PullRequest
1 голос
/ 04 августа 2020

Я переношу старый существующий проект на Springboot. У меня есть следующий метод:

public List<T> findAll(Class<?> clazz) {
    Criteria search = entityManager.unwrap(Session.class).createCriteria(clazz);
    List<T> entities = search.list();
    return entities;
}

И еще один:

public County findByName(String name) {
    Criteria search = entityManager.unwrap(Session.class).createCriteria(County.class).add(Restrictions.eq("county", name));

    County county = (County) search.uniqueResult();

    return county;
}

Это работает, но когда я запускаю проект, я получаю следующее предупреждение: Hibernate's legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery instead

Как Могу ли я преобразовать его в использование javax.persistence.criteria.CriteriaQuery и при этом получить тот же результат? Я никогда не использовал оба этих API.

Спасибо за помощь!

1 Ответ

1 голос
/ 04 августа 2020

найти все:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> cq = cb.createQuery(Country.class);

Root<Country> rootCountry= cq.from(Country.class);
cq.select(rootCountry);

List<Country> result = entityManager.createQuery(cq).getResultList();

найти по имени:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> cq = cb.createQuery(Country.class);

Root<Country> rootCountry= cq.from(Country.class);
cq.select(rootCountry);
cq.where(cb.equal(rootCountry.get(Country_.name),NAME))
// if you don't use metamodel (although it is recommended) -> cq.where(cb.equal(rootCountry.get("name"),NAME))

Country result = entityManager.createQuery(cq).getSingleResult();

Вы можете прочитать об этом больше по этой ссылке https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.html

...