Comment atteindre & # 8220; pas dans & # 8221; en utilisant des restrictions et des critères dans Hibernate?

StackOverflow https://stackoverflow.com/questions/1220901

  •  10-07-2019
  •  | 
  •  

Question

J'ai une liste de catégories. J'ai besoin d'une liste de catégorie en excluant 2,3 rangées. Pouvons-nous réussir en veille prolongée en utilisant des critères et des restrictions?

Était-ce utile?

La solution

Votre question n’est pas claire. En supposant que " Catégorie " est une entité racine et "2,3" sont des identifiants (ou des valeurs de certaines propriétés de la catégorie "), vous pouvez les exclure de la manière suivante:

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

Même chose avec DetachedCriteria .

Autres conseils

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

Pour les nouveaux critères depuis la 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top