Quantcast
Viewing all articles
Browse latest Browse all 43

Mixing implicit and explicit JOINs

I am having a problem with Hibernate generating invalid SQL. Specifically, mixing and matching implicit and explicit joins. This seems to be an open bug.

However, I'm not sure why this is invalid SQL. I have come up with a small toy example that generates the same syntax exception.

Schema

CREATE TABLE Employee (    employeeID INT,    name VARCHAR(255),    managerEmployeeID INT   )

Data

INSERT INTO Employee (employeeID, name) VALUES (1, 'Gary')INSERT INTO Employee (employeeID, name, managerEmployeeID) VALUES (2, 'Bob', 1)

Working SQL

Both of these queries work. I realize there is a Cartesian product; that's intentional.

Explicit JOIN:

SELECT e1.name,       e2.name,       e1Manager.name  FROM Employee e1 CROSS JOIN Employee e2 INNER JOIN Employee e1Manager    ON e1.managerEmployeeID = e1Manager.employeeID

Implicit JOIN:

SELECT e1.name,       e2.name,       e1Manager.name  FROM Employee e1,       Employee e2,       Employee e1Manager WHERE e1.managerEmployeeID = e1Manager.employeeID

Invalid SQL

This query does NOT work on MSSQL 2000/2008 or MySQL:

SELECT e1.name,        e2.name,        e1Manager.name  FROM Employee e1,       Employee e2 INNER JOIN Employee e1Manager     ON e1.managerEmployeeID = e1Manager.employeeID

In MS2000, I get the error:

The column prefix 'e1' does not match with a table name or alias name used in the query.

In MySQL, the error is:

Unknown column 'e1.managerEmployeeID' in 'on clause'.

Question(s)

  1. Why is this syntax invalid?
  2. Bonus: Is there a way to force Hibernate to use only explicit JOINs?


Viewing all articles
Browse latest Browse all 43

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>