如何在JPA中使用同一个表执行左外连接?当我尝试这个时:
sql.append("SELECT e1 FROM ");
sql.append(getPersistentClass().getName());
sql.append(" e1 LEFT OUTER JOIN ");
sql.append(getPersistentClass().getName());
sql.append(" e2 ON e1.username = e2.username AND e1.radacctid < e2.radacctid ");
sql.append("WHERE e2.radacctid IS NULL ");
sql.append("AND e1.acctstoptime IS NOT NULL ");
sql.append("AND DATEDIFF(NOW(), e1.acctstoptime) > ?1");
我收到错误:“意外令牌:ON第1行,第122列[SELECT e1 FROM com.homersoft.wh.db.entity.radius.RadAcct e1 LEFT OUTER JOIN com.homersoft.wh.db.entity.radius .RadAcct e2 ON e1.username = e2.username AND e1.radacctid&lt; e2.radacctid WHERE e2.radacctid IS NULL AND e1.acctstoptime IS NOT NULL AND DATEDIFF(NOW(),e1.acctstoptime)&gt;?1]“
答案 0 :(得分:0)
答案 1 :(得分:0)
我已经改变了这样的查询:
StringBuilder sql = new StringBuilder();
sql.append("SELECT e1 FROM ");
sql.append(getPersistentClass().getName());
sql.append(" e1 ");
sql.append("WHERE e1.id = (");
sql.append(" SELECT MAX(e2.id) FROM ");
sql.append(getPersistentClass().getName());
sql.append(" e2 WHERE e1.userName = e2.userName)");
sql.append("AND e1.stopTime IS NOT NULL ");
sql.append("AND e1.stopTime < ?1");
当然它比原来的慢。