我想将外部连接与自身保持一致,这样我就可以获得更多列。
我有一个表将序列号和操作收集为日志。我想根据序列号加入两个动作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。
答案 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() + "' "