У меня есть список категорий. Мне нужен список категорий, исключая 2,3 строки. Можем ли мы достичь спящего режима с помощью критериев и ограничений?
Как достичь "не в" с помощью ограничений и критериев в спящем режиме?
Ответ 1
Ваш вопрос несколько неясен. Предполагая, что "Категория" является корневым объектом, а "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
.
Ответ 2
Session session=(Session) getEntityManager().getDelegate();
Criteria criteria=session.createCriteria(RoomMaster.class);
//restriction used or inner restriction ...
criteria.add(Restrictions.not(Restrictions.in("roomNumber",new String[] { "GA8", "GA7"})));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<RoomMaster> roomMasters=criteria.list();
Ответ 3
Для новых критериев начиная с версии Hibernate 5.2:
CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
CriteriaQuery<Comment> criteriaQuery = criteriaBuilder.createQuery(Comment.class);
List<Long> ids = new ArrayList<>();
ids.add(1L);
ids.add(2L);
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();