spring-projects / spring-data-relational

Spring Data Relational. Home of Spring Data JDBC and Spring Data R2DBC.
https://spring.io/projects/spring-data-jdbc
Apache License 2.0
737 stars 339 forks source link

Dynamic projections for interfaces does not work #1813

Open mipo256 opened 4 weeks ago

mipo256 commented 4 weeks ago

I've created test in the playground repo to demonstrate the issue.

The fact is - currently, the JdbcQueryCreator.complete() fails to build a SELECT clause in case of interfaces to be used in dynamic projections. The stack trace is:

java.lang.IllegalStateException: SELECT does not declare a select list

    at org.springframework.data.relational.core.sql.SelectValidator.doValidate(SelectValidator.java:57)
    at org.springframework.data.relational.core.sql.SelectValidator.validate(SelectValidator.java:49)
    at org.springframework.data.relational.core.sql.DefaultSelectBuilder.build(DefaultSelectBuilder.java:202)
    at org.springframework.data.jdbc.repository.query.JdbcQueryCreator.complete(JdbcQueryCreator.java:182)
    at org.springframework.data.jdbc.repository.query.JdbcQueryCreator.complete(JdbcQueryCreator.java:66)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95)

That seems to happen only for dynamic projections, interface based projection on their own should be fine.

I think it's going to be great to add a support for this.