How to achieve "not in" by using Restrictions and criteria in Hibernate?
Asked Answered
H

3

53

I have list of category. I need a list of category by excluding 2,3 row. Can we achieve through hibernate by using Criteria and Restriction?

Heavierthanair answered 3/8, 2009 at 6:35 Comment(0)
F
109

Your question is somewhat unclear. Assuming "Category" is a root entity and "2,3" are ids (or values of some property of the category") you can exclude them using the following:

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})
  )
);

Same can be done with DetachedCriteria.

Fishnet answered 3/8, 2009 at 17:7 Comment(0)
W
3

For the new Criteria since version 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();
Wino answered 15/6, 2019 at 19:7 Comment(0)
S
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();
Scarface answered 19/5, 2010 at 5:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.