Hoe te bereiken “Niet in” door gebruik te maken van beperkingen en criteria in de slaapstand?

Ik heb een lijst met categorie. Ik heb een lijst met categorie nodig door 2,3 rij uit te sluiten. Kunnen we bereiken door een hibernationaal te gebruiken door criteria en beperking te gebruiken?


Antwoord 1, Autoriteit 100%

Uw vraag is enigszins onduidelijk. Uitgaande van “Categorie” is een root-entiteit en “2,3” zijn ID’s (of waarden van een eigen eigendom van de categorie “) U kunt ze uitsluiten met behulp van het volgende:

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

Hetzelfde kan worden gedaan met DetachedCriteria.


Antwoord 2, Autoriteit 3%

Voor de nieuwe criteria sinds versie 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();

Antwoord 3

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

Other episodes