JPA:JPARepository中GROUP BY之前的ORDER BY

时间:2017-07-05 08:39:12

标签: java mysql jpa

这是我的mysql查询:

SELECT * FROM (SELECT vev.* FROM vital_entry ve 
INNER JOIN vital_entry_values vev ON ve.vital_entry_id=vev.vital_entry_id 
WHERE ve.account_id=146 
ORDER BY date_entered DESC) t1
GROUP BY vital_id ;

我如何在JPA中执行此操作?我试过了:

@Query("SELECT t1 FROM (SELECT ve FROM VitalEntry ve " +
            "INNER JOIN ve.vitalEntryValues vev " +
            "WHERE ve.accountId=:accountId " +
            "ORDER BY ve.dateEntered DESC) t1")
List<VitalEntry> getRecentVitalValues(@Param("accountId") int accountId);

但是IntelIj显示错误expected identifer, got '('

2 个答案:

答案 0 :(得分:1)

改为使用原生查询:

@Query("SELECT * FROM (SELECT ve.* FROM vital_entry ve INNER JOIN vital_entry_values vev ON ve.vital_entry_id=vev.vital_entry_id WHERE ve.account_id=:accountId ORDER BY date_entered DESC) t1 GROUP BY vital_id", nativeQuery=true)
List<VitalEntry> getRecentVitalValues(@Param("accountId") int accountId);

答案 1 :(得分:1)

这给了我预期的结果

@Query("SELECT new com.v2.model.VitalValue(vev.vitalId, vev.value, max(ve.dateEntered), ve.vitalEntryType, vev.type) FROM VitalEntry ve " +
            "INNER JOIN ve.vitalEntryValues vev " +
            "WHERE ve.accountId=:accountId " +
            "GROUP BY vev.vitalId " +
            "ORDER BY max(ve.dateEntered) DESC")
List<VitalValue> getRecentVitalValues(@Param("accountId") int accountId);
相关问题