具有多个 INNER JOIN 的 Hibernate HQL 异常
Hibernate HQL exception with multiple INNER JOINs
我有 3 个表代表 3 个实体,如下所示:
服务 class :
Service
----------
- Long id (primary key)
- Collection<commandeLine> commandeLines (many to many)
- Date billingDate;
命令行class:
CommandLine
--------------
- Long id (primary key)
- Command (many to one)
- Collection<Service> services (many to many)
命令class:
Command
-------------
- Long id (primary key)
- Date date
- Collection<CommandLine> commandLines (one to many)
现在我在 Service.java
上有一个命名查询,它将 return 所有具有账单日期 > 到它们所附加的至少一个命令的日期的服务。所以(我猜)我必须使用 2 个内部联接来使用 CommandLine
class 对 Command
class.[=18= 具有实际的 link ]
我对 NamedQueries 所做的是:
@NamedQuery(name = "ServiceDateQuery", query = "SELECT s FROM Service s "
+ "INNER JOIN Command c WITH c.date > s.billingDate "
+ "INNER JOIN s.commandLines cl WITH cl.command = c.id") })
我收到一个错误:
org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!
我猜它不喜欢我不 link 从另一个实体发出命令的事实。但是我能做什么?如果我把 s.CommandLines 放在第一位,我也将无法执行查询。
有什么帮助吗?
不是WITH,而是WHERE,在查询结束时,
加入 jpa 是从 class 模型自动解析的:
SELECT s FROM Service s INNER JOIN s.comandelines cl INNER JOIN cl.comand c
WHERE c.date > s.billingDate
我有 3 个表代表 3 个实体,如下所示:
服务 class :
Service
----------
- Long id (primary key)
- Collection<commandeLine> commandeLines (many to many)
- Date billingDate;
命令行class:
CommandLine
--------------
- Long id (primary key)
- Command (many to one)
- Collection<Service> services (many to many)
命令class:
Command
-------------
- Long id (primary key)
- Date date
- Collection<CommandLine> commandLines (one to many)
现在我在 Service.java
上有一个命名查询,它将 return 所有具有账单日期 > 到它们所附加的至少一个命令的日期的服务。所以(我猜)我必须使用 2 个内部联接来使用 CommandLine
class 对 Command
class.[=18= 具有实际的 link ]
我对 NamedQueries 所做的是:
@NamedQuery(name = "ServiceDateQuery", query = "SELECT s FROM Service s "
+ "INNER JOIN Command c WITH c.date > s.billingDate "
+ "INNER JOIN s.commandLines cl WITH cl.command = c.id") })
我收到一个错误:
org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!
我猜它不喜欢我不 link 从另一个实体发出命令的事实。但是我能做什么?如果我把 s.CommandLines 放在第一位,我也将无法执行查询。
有什么帮助吗?
不是WITH,而是WHERE,在查询结束时, 加入 jpa 是从 class 模型自动解析的:
SELECT s FROM Service s INNER JOIN s.comandelines cl INNER JOIN cl.comand c
WHERE c.date > s.billingDate