我有这个实体(为简便起见,省略了注释):
@Entity
class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Lob
private String category;
@Lob
private String name;
@Lob
private String customer_number;
// more attributes omitted
}
我必须获取特定category
的不同uid
值的列表
在我的JpaRepository
中,我有这个:
@Query("SELECT DISTINCT product.category FROM Product as product WHERE product.customerNumber = :cn ORDER BY product.category")
Page<String> findDistinctCategoryByCustomerNumber(String cn,
Pageable pageable);
没有@Query
批注,将返回ID,而不是category
值。生成的SQL如下所示:
select distinct product0_.id as id1_0_, product0_.customer_number as customer2_0_, product0_.category as directory3_0_, product0_.name as name4_0_ from product product0_
where product0_.customer_number=?
order by product0_.id desc limit ?
但是我需要不同的类别而不是产品实体。缺少另一个想法,我在上面添加了@Query
注释。但是现在我得到了这个错误:
Order by expression "PRODUCT0_.ID" must be in the result list in this case; SQL statement:
select distinct product0_.directory as col_0_0_ from product product0_ where product0_.customer_number=? order by product0_.directory, product0_.id desc limit ? [90068-197]
但是我不能将id
添加到结果列表中,因为这将使DISTINCT
失效,因为id
是主键。
因此,我需要一个合适的方法名称来自动生成查询,或者需要一种方法来阻止JpaRepository将其order by
子句添加到我的@Query
的末尾。
答案 0 :(得分:1)
由于您要请求分页结果,因此创建了不需要的order by
。第n页的概念仅在对结果进行排序并且排序来自Pageable
方法参数时才有意义。
从查询中删除order by
,然后将sort
的{{1}}属性设置为按类别排序。