Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA,同一个表上的左外联接_Java_Jpa - Fatal编程技术网

Java 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 <

如何使用同一个表在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");
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?1]”(JPQL的)FROM子句中的“ON”在JPA2.1之前是无效语法,这还不是最终语法。把“ON”子句放在WHERE-maybe中,尽管意义不同。请注意,一些JPA实现已经提供了对它的支持,尽管(例如)

我对查询做了如下更改:

    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子句。