У меня есть этот объект (для краткости аннотации опущены):
@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
вместо значений 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
.