Spring Projection отображает неверный результат при использовании расширяет интерфейс - PullRequest
1 голос
/ 29 мая 2019

У меня есть два интерфейса проекции,
Первый, ProductMinimal.java:

public interface ProductMinimal {
    long getId();
    String getName();
    Long getOwnerId();
    String getOwnerName();
    String getFeaturedImage();
}

и второй ProductStatistic.java

public interface ProductStatistic extends ProductMinimal {
    int getTotalVisit();
}

Когда я использую этот репозиторий:

Page<ProductStatistic> findMostView(Pageable pageable);

Я получаю результат, но отображен неверно:

[{
    name=1, WRONG
    id=Name, WRONG
    ownerId=administrator, WRONG
    ownerName=21_d20024e8-970f-4738-9cea-8dda22d0afdd.jpg, WRONG
    featuredImage=1, WRONG
    totalVisit=21
}]

это должно быть:

[{
    name=Name,
    id=1,
    ownerId=1,
    ownerName=administrator,
    featuredImage=21_d20024e8-970f-4738-9cea-8dda22d0afdd.jpg,
    totalVisit=21
}]

, но когда я помещаю весь метод в ProductMinimal в ProductStatistic и удаляю родительский интерфейсв ProductStatistic, поэтому ProductStatistic имеет свой собственный атрибут:

public interface ProductStatistic {
    long getId();
    String getName();
    Long getOwnerId();
    String getOwnerName();
    String getFeaturedImage();
    int getTotalVisit();
}

с использованием нового этого ProductStatistic, теперь я получаю ожидаемый результат.

[{
    name=Name,
    id=1,
    ownerId=1,
    ownerName=administrator,
    featuredImage=21_d20024e8-970f-4738-9cea-8dda22d0afdd.jpg,
    totalVisit=21
}]

Мне не нравится использовать этот способ, переписать все существующие свойства.
Я ожидаю, что смогу расширить свойства из ProductMinimal, поэтому мне не нужно переписывать код.
Почему использование проекции на основе интерфейса, которая расширяет проекцию другого интерфейса, дает неправильный результат?

...