具有多个INNER JOIN的Hibernate HQL异常

时间:2015-03-20 16:26:13

标签: hibernate jpa hql named-query

我有3个表代表3个这样的实体:

服务类:

Service
----------
- Long id (primary key)
- Collection<commandeLine> commandeLines (many to many)
- Date billingDate;

CommandLine类:

CommandLine
--------------
- Long id (primary key)
- Command (many to one)
- Collection<Service> services (many to many)

命令类:

Command
-------------
- Long id (primary key)
- Date date
- Collection<CommandLine> commandLines (one to many)

现在我在Service.java上有一个命名查询,它会返回结算日期&gt;的所有服务。到它们所附加的至少一个命令的日期。所以(我猜)我必须使用2个内部联接来使用CommandLine类,它具有到Command类的实际链接。

我对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!

我想这并不是因为我没有从另一个实体链接到Command。但是我能做什么?如果我把s.CommandLines放在第一位,我就无法执行查询。

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

不是WITH,而是WHERE和查询结束时, jpa中的join将自动从类模型中解析出来:

SELECT s FROM Service s INNER JOIN s.comandelines cl INNER JOIN cl.comand c
WHERE c.date > s.billingDate