我的数据库中有以下表(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
处于多对一的关系中。
我正在尝试为Hibernate 4编写一个 SQLite查询,它将在一个表中提供 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
(。
您还必须加入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
。