嵌套 DTO 中的查询结果



Spring Data 中不允许在 JPQL 查询中使用嵌套的 DTO 吗?

@Query("SELECT new test.customresult.CategoryCounter(c.name, " 
+ "new test.customresult.CarResult(COUNT(e.category), e.category)"
+ "FROM error e JOIN e.car c  "
+ "GROUP BY c.name,e.category")
List<CategoryCounter>countErrors();

因为,我在尝试使用上述JPQL查询时收到以下错误消息:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , near line 1, 

我想从 JPQL 查询返回这样的 JSON 文件:

[{
"Car 1": 
[{
"count": 1,
"category": "A"
}, {
"count": 2,
"category": "B"
}, {
"count": 0,
"category": "C"
}, {
"count": 0,
"category": "D"
}
]
}, {
"Car 2": 
[{
"count": 0,
"category": "A"
}, {
"count": 0,
"category": "B"
}, {
"count": 4,
"category": "C"
}, {
"count": 5,
"category": "D"
}
]
}
]

有一个 car 表和一个错误表,其中包含car表的类别和外键。

我想使用嵌套的 DTO 来表示所需的输出:

"包装器"DTO

public class CategoryCounter {
private String name;
private CarResult carResult ;
public CategoryCounter (String name, CarResult carResult ) {
this.name= name;
this.carResult = carResult ;
}

public CarResult getCarResult () {
return carResult ;
}
public void setCarResult(CarResult carResult ) {
this.carResult = carResult ;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
}

和"嵌套"DTO :

public class CarResult {

private Long count;
private String category;
public CarResult (Long count, String category) {
this.count = count;
this.category= category;
}

public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category= category;
}
}

我不确定这是否可能是问题所在...但是您的 FROM 子句紧跟在)之后,它说:

+ "new test.customresult.CarResult(COUNT(e.category), e.category)"
+ "FROM error e JOIN e.car c  "

这与:e.category)FROM所以在该部分放置一个空格并重试......

+ "new test.customresult.CarResult(COUNT(e.category), e.category)"
+ " FROM error e JOIN e.car c  "

问题是错误(由:org.hibernate.hql.internal.ast.QuerySyntaxException引起)是语法错误

最新更新