Запрос критериев гибернации объединяется с нулевым значением - PullRequest
1 голос
/ 17 января 2011

У меня есть таблица ролей. Каждая роль может принадлежать организации. Роли, которые не принадлежат организации, имеют значение null. Я хочу найти в таблице все роли для конкретной организации или организации, в которой она отсутствует.

Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class)
.add(Restrictions.or(
    Restrictions.eq("organization",organization.getId()), 
        Restrictions.isNull("organization")));

Файл сопоставления имеет:

<many-to-one class="com.myname.models.Organization" name="organization">
<column name="organization_id" precision="22" scale="0" />
</many-to-one>

При выполнении запроса я получаю:

IllegalArgumentException occurred calling getter com.myname.models.Organization.id

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

Как изменить файл запроса или сопоставления для достижения моих целей?

Ответы [ 2 ]

3 голосов
/ 31 января 2011

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

Вам нужно будет построить критерии следующим образом:

final Criterion lhs = Restrictions.eq("organization",organization.getId());
final Criterion rhs = Restrictions.isNull("organization");
Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Role.class).add(Restrictions.or(lhs, rhs));
1 голос
/ 17 января 2011
IllegalArgumentException occurred calling getter com.myname.models.Organiation.id

Это говорит о том, что вы используете «Организацию» где-то, где предположительно это должна быть «Организация».

...