2017-10-06 78 views
0

我在DAO添加了这个:与返回的对象JPA @Query问题

@Query("SELECT distinct LBL.cId, LBL from FooBar LBL ORDER BY LBL.collectedAt DESC") 
    List<FooBar> findDistinctcIdOrderByCollectedAtDesc(); 

然后这是我的服务

List<FooBar> fooBars = this.liveBusLocationDao.findDistinctcIdOrderByCollectedAtDesc(); 

这是我得到了什么,当我调试内容fooBars

fooBars = {[email protected]} size = 1 
0 = {Object[2]@11093} 
    0 = "string" 
    1 = {[email protected]} "FooBar(cId=string, internalcId=123456789012, createdAt=2011-11-02 02:59:12.208, collectedAt=2017-10-06 14:26:26.544)" 

如何遍历此结果?

+0

这是春天的数据JPA不是JPA API。即没有这样的'JPA @ Query'。也许正确标记你的问题 – DN1

回答

0

您的查询正在请求2个属性。 你可以做一个自定义类,作为id和对象,或者你可以只从SELECT

删除 LBL.cId

你的要求应该是:

@Query("SELECT distinct LBL from FooBar LBL ORDER BY LBL.collectedAt DESC") 
List<FooBar> findDistinctcIdOrderByCollectedAtDesc(); 

的不同的工作对整个行。看看吧,如果你不舒尔的话,你可以使用group by LBL

https://stackoverflow.com/a/10066187/3543153

+0

但是这个查询会给我什么结果呢?在哪个列上应用了不同的条件? – nirvair

+0

我更新了我的答案。在整个行上不同的工作。你也可以用一个组代替不同的组 – DamienB

0

您将需要创建一个结果类,如果你想使用投影而无需使用特殊的语法在JPA查询得到Object[]的结果。

package com.example 

class ResultClass{ 

    int fieldOne; 
    String fieldTwo; 

    public (int fieldOne, intfieldTwo){ 
    // .. set fields 
    } 

} 

和查询:

@Query("SELECT distinct new com.example.ResultClass(LBL.cId, LBL.strProperty) from FooBar LBL ORDER BY LBL.collectedAt DESC") 
    List<ResultClass> findDistinctcIdOrderByCollectedAtDesc();