3

我的域模型是这样的:

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。

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

4

2 回答 2

13

@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];;
 ...
  }
于 2013-06-04T11:06:49.300 回答
0

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

JPQL 构造函数表达式 - org.hibernate.hql.ast.QuerySyntaxException:表未映射

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

SELECT DISTINCT new com.mypackage.MyInterestingCollectedData(a.name, a.xAxis, a.yAxis) from CollectedData a
于 2017-06-29T06:39:11.720 回答