我遇到Hibernate生成无效SQL的问题.具体来说,混合和匹配隐式和显式连接.这似乎是一个开放的bug.
但是,我不确定为什么这是无效的SQL.我想出了一个生成相同语法异常的小玩具示例.
CREATE TABLE Employee (
employeeID INT,
name VARCHAR(255),
managerEmployeeID INT
)
Run Code Online (Sandbox Code Playgroud)
INSERT INTO Employee (employeeID, name) VALUES (1, 'Gary')
INSERT INTO Employee (employeeID, name, managerEmployeeID) VALUES (2, 'Bob', 1)
Run Code Online (Sandbox Code Playgroud)
这两个查询都有效.我意识到有笛卡尔积; 那是故意的.
明确的加入:
SELECT e1.name,
e2.name,
e1Manager.name
FROM Employee e1
CROSS JOIN Employee e2
INNER JOIN Employee e1Manager
ON e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)
隐含的JOIN:
SELECT e1.name,
e2.name,
e1Manager.name
FROM Employee e1,
Employee e2,
Employee e1Manager
WHERE e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)
此查询不适用于MSSQL 2000/2008或MySQL:
SELECT …Run Code Online (Sandbox Code Playgroud)