JPA在FROM子句中不按顺序生成SQL查询表

时间:2018-01-05 16:17:50

标签: java sql jpa eclipselink

我多次遇到问题,我的JPA查询中的左连接会生成一个SQL查询,其中表在FROM子句中的顺序不正确且无法执行。

一些伪实体的简单示例:

CAR {
  int id,
  string model
}

OWNER {
  Car car,
  string owner_name
}

BORROWER {
  Car car,
  string borrower_name
}

JPA查询:

SELECT O, B
FROM OWNER O
LEFT JOIN BORROWER B ON ( B.CAR = O.CAR )

生成的SQL查询如下所示:

SELECT *
FROM owner_table
LEFT JOIN borrower_table ON ( borrower_table.car_id = car_table.id )
, car_table
WHERE car_table.id = owner_table.car_id

这不会运行,因为car_table是在连接中引用后声明的。我有什么可以做的吗?

在Oracle DB上运行EclipseLink。

1 个答案:

答案 0 :(得分:0)

我猜您可以使用旧样式连接构建jpa查询:

SELECT O, B
FROM OWNER O, BORROWER B, CAR C
WHERE (O.car_id = B.car_id and B.car_id = C.car_id) 
       or (O.car_id is null)
       or (O.car_id != B.car_id)