Hibernate HQL оставил соединение с нулевыми значениями

У меня есть эти 2 таблицы

таблица А со столбцами: идентификатор, описание, заголовок

таблица B со столбцами: id, user, authenticnt, rel_id

таблица B rel_id - это FK для таблицы A.id (один к одному)

==> Table A Entity
==> @JoinColumn(name = "REL_ID", nullable = false, referencedColumnName = "ID")
    private ObjectTableA objA;

Теперь я хочу получить с HQL такой же результат, как Sql:

select *
from tableA a
left outer join tableB b on a.id = b.REL_ID and b.user='ADMIN';

которые включают в себя все таблицы A строки ONCE и ссылки на таблицу B (включая ноль)

например.

id  -  description  -  title  -   id   - user    -  authent  -  rel_id
1   -  des1         -  tit1   -   6    - admin   -  4        -  5
2   -  des2         -  tit2   -   null - null    -  null     - null

Проблема с Hibernate HQL и второй строкой выше (id=2) заключается в том, что я не могу добраться до данных таблицы A, выполнив EntityB.rel_id, поскольку объект rel_id (типом EntityA) является нулевым, что указывает на то, что я не могу показать требуемый данные на мой взгляд! Как я могу преодолеть эту проблему? Спасибо!

1 ответ

Либо я не правильно понял проблему, либо вы должны объяснить ее по-другому.

Один факт, который кажется запутанным, является отображением, которое вы показываете. Это говорит

Таблица А Сущность

но есть поле типа ObjectTableA, Возможно ли, что это исходный код ObjectTableB, В противном случае для меня это выглядит как ссылка на себя (Entity ObjectTableA содержит поле типа ObjectTableA) и не имеет смысла в этом случае.

Если мое предположение верно и, следовательно, ваше отображение говорит nullable=false, никогда не должно быть сущности B без соответствующей сущности A. В противном случае возможно, что существует множество сущностей типа A без связанной сущности типа B. Это именно то, о чем ваша вторая строка:

2 - des2 - tit2 - ноль - ноль - ноль - ноль

Если вы хотите получить все объекты ObjectTableA, ваш запрос HQL будет выглядеть примерно так:

Запрос № 1: SELECT a FROM ObjectTableA a;

Если вы хотите получить все объекты ObjectTableB, это будет выглядеть так:

Запрос № 2: SELECT b FROM ObjectTableB b WHERE b.user =:username;

Если вы также хотите загрузить все объекты ObjectTableA вместе с объектами ObjectTableB, напишите что-то вроде:

Запрос № 3: SELECT b FROM ObjectTableB b JOIN FETCH b.objA AS a WHERE b.user =:username;

Конечно, вы получите доступ только к данным вашей строки (объект A без правильного объекта B) с HQL-запросом № 1, но это должно быть понятно.

Другие вопросы по тегам