具有多个 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