spring-projects / spring-data-jpa

Simplifies the development of creating a JPA-based data access layer.
https://spring.io/projects/spring-data-jpa/
Apache License 2.0
3.01k stars 1.42k forks source link

Collections cannot be used in dto projections [DATAJPA-1785] #2078

Open spring-projects-issues opened 7 years ago

spring-projects-issues commented 7 years ago

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:

1 votes, 3 watchers

spring-projects-issues commented 7 years ago

Kamil commented

I think, that here is simmilar issue: https://jira.spring.io/browse/DATACMNS-969

spring-projects-issues commented 4 years ago

Mark Paluch commented

Moved to Spring Data JPA