Работа с несколькими критериями 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));