كيفية تحقيق "لا" باستخدام القيود والمعايير في السبات؟
-
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();
لا تنتمي إلى StackOverflow