在多列上使用Spring数据中的distinct

时间:2013-06-04 10:51:35

标签: spring hibernate spring-data spring-data-jpa

我的域名模型是这样的:

CollectedData {
  String name;
  String description;
  int count;
  int xAxis,
  int yAxis
}

使用Spring数据存储库查询,我想检索所有唯一的行(名称唯一,xAxis,yAxis)

我正在尝试这样的事情

@Query("select distinct a.name, a.xAxis, a.yAxis from CollectedData a")
List<CollectedData> findAllDistinctData();

所以,当我做的时候

List<CollectedData> records= findAllDistinctData();
for (CollectedData record : records) { //Exception on this line
 }

异常 [Ljava.lang.Object;无法转换为CollectedData。

还有其他方法可以为此编写查询吗?

2 个答案:

答案 0 :(得分:6)

@Query返回ArrayList of Object(s)而不是特定类型的对象。所以你必须定义一些像

这样的东西
@Query("select distinct a.name, a.xAxis, a.yAxis from CollectedData a")
List<Object> findAllDistinctData();

然后按照你的要求施展,

List<Object> cdataList=findAllDistinctData();
for (Object cdata:cdataList) {
   Object[] obj= (Object[]) cdata;
     String name = (String)obj[0];
    String description = (String)obj[1];;
 ...
  }

答案 1 :(得分:0)

您可以使用JPA的构造函数表达式功能返回一个只包含您感兴趣的列的更具体的对象,而不是返回一个对象。请参阅以下答案:

JPQL Constructor Expression - org.hibernate.hql.ast.QuerySyntaxException:Table is not mapped

根据您的示例,您可以创建一个只包含您感兴趣的列的新对象:

SELECT DISTINCT new com.mypackage.MyInterestingCollectedData(a.name, a.xAxis, a.yAxis) from CollectedData a