Работа с несколькими критериями hibernate с логическим и

до сих пор я работал только с случаем с 2 свойствами и в качестве логического оператора, поэтому я использую LogicalExpression так

Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
LogicalExpression and = Restrictions.and(eqRef, eqType);

на этот раз вдоль его более 2, поэтому я немного запутался.скажем, на этот раз я добавил свойство username, я могу сделать нормальную цепочку с

session.createCriteria(this.getPersistentClass())
.add(Restrictions.eq("referenceID", referenceId))
.add(Restrictions.eq("verificationType", type))
.add(Restrictions.eq("username", username))
.list();

но теперь я не знаю, какой логический оператор используется между ними.я также испытываю соблазн сделать это:

Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
Criterion equsername = Restrictions.eq("username", username);
LogicalExpression and = Restrictions.and(eqRef, eqType);
LogicalExpression secondand = Restrictions.and(and, equsername);

Я тоже вижу eqAll, но я никогда не использовал его раньше.У тебя есть какие-нибудь идеи на этот счет?Как вы это делаете, и спасибо, что прочитали это.

4 ответов


поскольку вы "и" - ing все ваши ограничения группировка не имеет значения, поэтому вы можете просто продолжить, как и во втором примере, так как нет ничего, что можно получить, сгруппировав их, например

.add(Restrictions.eq("referenceID", referenceId)).add(Restrictions.eq("verificationType", type)).add(Restrictions.eq("username", username))...

вы сталкиваетесь с этой проблемой, когда вам нужно сгруппировать смешанные" и "и" или "запросы, если вы хотите сгруппировать несколько" или " значения вы также можете добавить критерии к дизъюнкция


добавление этих ограничений индивидуально создает отношение " и " между ними. Этого достаточно для того, что вам нужно.


но теперь я не знаю, какая логический оператор между ними.

хорошие ответы уже, но в стороне вы можете использовать свойство hibernate.show_sql, установите его в true, и вы сможете точно увидеть, какой sql ваши критерии производят.


просто использовать

criteria = session.createCriteria(Model.class).add(
                             Restrictions.between("ModelDate", dateMin, dateMax));