Как добиться этого, используя ограничения и критерии в Hibernate?

У меня есть список категорий. Мне нужен список категорий, исключая 2,3 строки. Можем ли мы достичь через спящий режим, используя критерии и ограничения?


person Shashi    schedule 03.08.2009    source источник


Ответы (2)


Ваш вопрос несколько не ясен. Предполагая, что «Категория» является корневым объектом, а «2,3» — идентификаторами (или значениями некоторого свойства категории), вы можете исключить их, используя следующее:

Criteria criteria = ...; // obtain criteria from somewhere, like session.createCriteria() 
criteria.add(
  Restrictions.not(
     // replace "id" below with property name, depending on what you're filtering against
    Restrictions.in("id", new long[] {2, 3})
  )
);

То же самое можно сделать с DetachedCriteria.

person ChssPly76    schedule 03.08.2009

Для новых критериев начиная с версии Hibernate 5.2:

CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<Comment> criteriaQuery = criteriaBuilder.createQuery(Comment.class);

List<Long> ids = new ArrayList<>();
ids.add(2L);
ids.add(3L);

Root<Comment> root = getRoot(criteriaQuery);
Path<Object> fieldId = root.get("id");
Predicate in = fieldId.in(ids);
Predicate predicate = criteriaBuilder.not(in);

criteriaQuery
        .select(root)
        .where(predicate);

List<Comment> list = getSession()
        .createQuery(criteriaQuery)
        .getResultList();
person FreeOnGoo    schedule 15.06.2019