Работа с несколькими критериями гибернации с логическим И - PullRequest
6 голосов
/ 11 ноября 2009

До сих пор я работал только с делом с 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 ]

10 голосов
/ 11 ноября 2009

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

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

Вы сталкиваетесь с этой проблемой, когда вам нужно сгруппировать смешанные запросы «И» и «ИЛИ», если вы хотите сгруппировать несколько значений «ИЛИ», вы также можете добавить Критерии к дизъюнкции

1 голос
/ 11 ноября 2009

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

0 голосов
/ 18 июня 2014

просто используйте это

criteria = session.createCriteria(Model.class).add(
                             Restrictions.between("ModelDate", dateMin, dateMax));
0 голосов
/ 11 ноября 2009

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

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

...