如何在Hibernate中使用Restrictions和Criteria实现“not in”?

ztmd8pv5  于 2023-10-23  发布在  其他
关注(0)|答案(3)|浏览(177)

我有一个类别列表。我需要一个排除2,3行的类别列表。我们可以通过使用标准和限制来实现休眠吗?

91zkwejq

91zkwejq1#

你的问题有点不清楚。假设“Category”是一个根实体,“2,3”是id(或类别”的某些属性的值),您可以使用以下方法排除它们:

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

tuwxkamq

tuwxkamq2#

对于自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();
1tuwyuhd

1tuwyuhd3#

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

相关问题