Если необходимо отобрать объекты по нескольким полям, поступаем просто:
Session session = (Session) em.getDelegate();Все просто, все понятно.
Criteria criteria = session.createCriteria(Payment.class);
criteria.addOrder(Order.desc("paymentDate"));
criteria.add(Restrictions.eq("id", request.getPaymentId()));
criteria.add(Restrictions.ge("paymentDate", request.getSince()));
criteria.add(Restrictions.le("paymentDate", request.getTill()));
return criteria.list();
Но если необходимо отобрать записи не по полю объекта, а по полю объекта, на который ссылается данный?
В этом случае правильное рещение выглядит так (допустим, что entity Payment имеет ссылку на entity Account)
criteria = criteria.createCriteria(Payment.class);Но если нужно сделать отбор по embedded полю, поступить следует так:
// добавляем отбор по полям класса Payment
// Опускаемся к объекту Account
criteria = criteria.createCriteria("Account");
// Добавляем отбор по полям Account
criteria.add(Expression.eq("accountNumber", 123));
criteria.add(Restrictions.eq("account.accountNumber", 123));
1 комментарий:
так же для этих целей можно и нужно использовать alias-ы
Отправить комментарий