выберите отдельные значения, используя данные по весне - PullRequest
0 голосов
/ 06 июня 2018

Я использую Java 8 и spring-data-rest для создания API на моих данных.

У меня есть таблица Car (id, name, date ...)

Iя пытаюсь получить конечную точку для получения разных имен автомобилей.

вот мой репозиторий:

@RepositoryRestResource(path = "cars")    
public interface CarRepository extends JpaRepository<Car, Long> {
    //What i want to do
    //@Query(value = "select distinct c.name as name from Car c")
    @Query(value = "select distinct c from Car c")
    List<Car> findDistinctName();      
}

Комментарий не работает, у меня есть исключение

java.lang.IllegalArgumentException: PersistentEntity must not be null! 

очевидно, это нормальное поведение SDR.

Я попробовал другое решение, используя Projections

@Projection(name = "name", types = {Car.class})
public interface CarName {
    String getName();
}

, но я не могу получить различные значения, любая идея?

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Я нашел (безобразный) обходной путь, используя jpql:

@Query(value = "select c from Car C WHERE c.id IN (SELECT min(ca.id) FROM Car ca Group by ca.name)")

0 голосов
/ 06 июня 2018

Все, что вам нужно сделать, если вам нужен отдельный список автомобилей, это такой метод запроса:

public interface CarRepository extends JpaRepository<Car, Long> {
    List<Car> findDistinctBy();
}

Spring Data JPA поддерживает ключевое слово Distinct в методах запроса к репозиториюустановить отдельный флаг для создаваемого запроса.

...