Java JPA,同一个表上的左外联接
如何使用同一个表在JPA中执行左外部联接?当我尝试这个:Java JPA,同一个表上的左外联接,java,jpa,Java,Jpa,如何使用同一个表在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 <
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");
sql.append(“从中选择e1”);
append(getPersistentClass().getName());
append(“e1左外连接”);
append(getPersistentClass().getName());
append(“e1.username上的e2=e2.username和e1.radacctid?1”);
我得到错误:“意外标记:在第1行附近的第122列[从com.homersoft.wh.db.entity.radius.RadAcct e1中选择e1左外连接com.homersoft.wh.db.entity.radius.RadAcct e2 ON e1.username=e2.username和e1.radaccctid
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");
StringBuilder sql=new StringBuilder();
追加(“从中选择e1”);
append(getPersistentClass().getName());
sql.append(“e1”);
append(“其中e1.id=(”);
append(“选择MAX(e2.id)FROM”);
append(getPersistentClass().getName());
append(“e2其中e1.userName=e2.userName)”;
sql.append(“且e1.stopTime不为空”);
sql.append(“和e1.stopTime<?1”);
当然,它比原来的版本慢。甚至hibernate 4.2 core也支持ON子句。