كيفية تحقيق "لا" باستخدام القيود والمعايير في السبات؟

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

  •  10-07-2019
  •  | 
  •  

سؤال

ولدي قائمة الفئة. انا بحاجة الى قائمة الفئة من خلال استبعاد 2،3 التوالي. يمكننا تحقيقه من خلال السبات باستخدام معايير وتقييد؟

هل كانت مفيدة؟

المحلول

وسؤالك غير واضح إلى حد ما. على افتراض "الفئة" هو كيان الجذرية و"2،3" هي هويات (أو قيم بعض الممتلكات من فئة ") يمكنك استبعاد لهم باستخدام ما يلي:

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.

نصائح أخرى

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

لمعايير جديدة منذ الإصدار 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top