spring-data-jpa
spring-data-jpa copied to clipboard
Collections cannot be used in dto projections [DATAJPA-1785]
Anthony Foulfoin opened DATAJPA-1785 and commented
Hi,
I'm facing an issue when I try to use a dto projection with a spring repository
class CarProjection {
String name;
List<Color> colors;
public CarProjection (String name, List<color> colors) {
...
}
}
class Car{
String name;
@OneToMany(mappedBy = "car")
List<Color> colors;
}
class Color{
@ManyToOne
Car car;
}
The method signature in the repository :
Slice<CarProjection> findAllBy(Pageable page);
I get an exception when I call it:
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [CarProjection]. Expected arguments are: java.lang.String, Color[........]
The expected second argument in the stacktrace is a Color, while I expected a List.
If I use an interface instead of a dto, it works as expected:
interface CarProjection {
String getName();
List<Color> getColors();
}
But i'm facing some gson serialization problems with interface projections, maybe because of the spring proxy so I can't use this workaround
Issue Links:
- DATAJPA-1786 Projections on collection properties are not distinct
1 votes, 3 watchers