SQLite запрос с 3 сущностями в Hibernate 4 (вложенное соединение?) - PullRequest
0 голосов
/ 14 февраля 2020

В моей базе данных есть следующие таблицы ( SQLite ):

CREATE TABLE product (
    id INTEGER NOT NULL, 
    name TEXT, 
    PRIMARY KEY (id)
)

CREATE TABLE feedback(
  product INTEGER PRIMARY KEY,
  score NUMERIC,
  textnote VARCHAR(255),
  FOREIGN KEY(product) REFERENCES product(id)
)

CREATE TABLE product_detail (
    id INTEGER NOT NULL, 
    product INTEGER, 
    description TEXT, 
    url VARCHAR, 
    PRIMARY KEY (id), 
    FOREIGN KEY(product) REFERENCES product (id), 
)

Так что feedback находится в отношениях один к одному с product и product_detail находится в отношениях многих к одному с product.

Я пытаюсь написать SQLite запрос для Hibernate 4 , который даст мне все атрибуты из 3 таблиц в одной таблице. Все, с чем я пришел, это вот что:

String hql = "SELECT p.id, p.name, d.id, d.description, d.url " +
            "FROM ProductDetail d INNER JOIN d.product AS p";

Я правильно получаю нужные значения из product и product_detail. Как я могу добавить к запросу также информацию в feedback? Я знаю, что во всех продуктах есть хотя бы одна деталь продукта, но я не могу сказать то же самое об обратной связи: большинство продуктов не имеют обратной связи. Я думаю, что я должен использовать LEFT JOIN, но я не могу понять, как ... Обратите внимание, что, поскольку я использую Hibernate, у меня есть все классы относительно таблиц в моем приложении (Feedback, ProductDetail и Product).

1 Ответ

1 голос
/ 14 февраля 2020

Вы также должны присоединиться к feedback:

SELECT 
  p.id, p.name,
  f.score, f.textxnote, 
  d.id, d.description, d.url
FROM product p 
INNER JOIN feedback f ON f.product = p.id
INNER JOIN ProductDetail d ON d.product = p.id

Вы можете изменить на LEFT объединения, если есть случай, когда у продукта нет строки ни в одной из таблиц feedback и ProductDetail.

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