У меня есть два интерфейса проекции,
Первый, 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, поэтому мне не нужно переписывать код.
Почему использование проекции на основе интерфейса, которая расширяет проекцию другого интерфейса, дает неправильный результат?