HQL查询使用左外连接将表连接到自身

时间:2017-06-09 02:03:49

标签: hibernate jpa hql

我想将外部连接与自身保持一致,这样我就可以获得更多列。

我有一个表将序列号和操作收集为日志。我想根据序列号加入两个动作a1和a2。返回的结果应该有serialNumber,a1和a2。如果a2不存在,则为null。当我使用where语句时,它只会返回同时具有a1和a2的serialNumber。

"select l.serialNumber, l.time, s.time "
+ "from Log as l left outer join Log as s "
+ "ON s.serialNumber = l.serialNumber "
+ "where s.action = 'a2' AND l.action= 'a1' "
+ "AND l.time >= '" + start.getTime() + "' "
+ "AND l.time <= '" + end.getTime() + "' "

我在尝试运行上述查询时遇到异常:org.hibernate.TransactionException。

1 个答案:

答案 0 :(得分:1)

您的HQL无效,您不需要(可以)指定JOIN列,这已经需要在您的实体中进行映射。

尝试:

"select l.serialNumber, l.time, s.time "
+ "left join l.serialNumber s "
+ "where s.action = 'a2' AND l.action= 'a1' "
+ "AND l.time >= '" + start.getTime() + "' "
+ "AND l.time <= '" + end.getTime() + "' "