web-dev-qa-db-fra.com

Comment réaliser "pas dans" en utilisant des restrictions et des critères dans Hibernate?

J'ai la liste des catégories. J'ai besoin d'une liste de catégories en excluant 2,3 lignes. Pouvons-nous réaliser grâce à l'hibernation en utilisant des critères et des restrictions?

45
Shashi

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 en utilisant les éléments suivants:

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

La même chose peut être faite avec DetachedCriteria.

97
ChssPly76

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();
1
FreeOnGoo
 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();
1
sourav