Выберите объект, в котором отсутствует связь Hibernate OneToOne - PullRequest
5 голосов
/ 28 декабря 2011

У меня есть два класса с двунаправленным сопоставлением @OneToOne друг другу.

Class A {
@OneToOne(fetch = FetchType.Lazy, mappedBy="a")
private B b;
}

Class B {
@OneToOne(fetch = FetchType.Eager)
private A a;
}

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

Я пытался:

Criteria criteria = getSession().createCriteria(B.class)
criteria.add(Restrictions.isNull("a")

, но это, кажется, всегда возвращает нульМысли?

Ответы [ 2 ]

9 голосов
/ 28 декабря 2011

Это должно работать, для обоих направлений:

Criteria criteria = session.createCriteria(B.class, "b");
criteria.createAlias("b.a", "a", Criteria.LEFT_JOIN);
criteria.add(Restrictions.isNull("a.id"));
1 голос
/ 29 декабря 2011

В Hibernate есть задокументированная проблема, которая гласит, что "Синтаксис языка запросов IS NULL не будет работать с однозначной ассоциацией!"

Также на том же выпуске находится ожидающая Jira JIRA

Пока это не исправлено, обходной путь, предоставленный JB Nizet, прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...