HQL 查询使用左外连接将 table 与自身连接
HQL query to join table with itself with left outer join
我想将 table 与其自身进行左外连接,以便获得额外的列。
我有一个 table 收集序列号和操作作为日志。我想根据序列号加入两个动作 a1 和 a2。 returned 结果应该有 serialNumber、a1 和 a2。如果 a2 不存在,它将为空。当我使用 where 语句时,它只会 return serialNumber 同时具有 a1 和 a2.
"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.
您的 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() + "' "
我想将 table 与其自身进行左外连接,以便获得额外的列。
我有一个 table 收集序列号和操作作为日志。我想根据序列号加入两个动作 a1 和 a2。 returned 结果应该有 serialNumber、a1 和 a2。如果 a2 不存在,它将为空。当我使用 where 语句时,它只会 return serialNumber 同时具有 a1 和 a2.
"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.
您的 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() + "' "