After upgrading from 1.5.4 of Spring Boot to 2.1.0 LTS
I am getting some issues with particular repository methods.
I checked the various issues on SO and JIRA mentioning @Query and @ResultsSetMapping and have applied those changes accordingly, however I still facing the same issue.
For example here:
Repository
@CrossOrigin
@RepositoryRestResource(path = "/iCreateChange")
public interface ICreateChangeRepository extends JpaRepository<ICreateChange, Long> {
List<ChangeTask> listStartedChangesByInitiator(
@Param("initiator")
@RequestParam
@ApiParam(name = "initiator", value = "initiator")
String initiator);
List<ChangeTask> listDataValuesAndStatusByChangeId(
@Param("changeId")
@RequestParam
@ApiParam(name = "changeId", value = "changeId")
Long changeId);
}
Entity
@SqlResultSetMappings({
@SqlResultSetMapping(
name = "StartedChangeMapping",
classes = @ConstructorResult(
targetClass = ChangeTask.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "status", type = String.class),
@ColumnResult(name = "data_values", type = String.class)
}
)
),
@SqlResultSetMapping(
name = "ActiveTaskChangeMapping",
classes = @ConstructorResult(
targetClass = ChangeTask.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "status", type = String.class),
@ColumnResult(name = "data_values", type = String.class)
}
)
)
})
@NamedNativeQueries({
@NamedNativeQuery(
name = "ICreateChange.listStartedChangesByInitiator",
query =
"SELECT id as id, status as status, data_values as data_values "
+ "FROM icreate_change "
+ "WHERE initiator = :initiator "
+ "AND workflow_process_id = 0",
resultSetMapping = "StartedChangeMapping"
),
@NamedNativeQuery(
name = "ICreateChange.listDataValuesAndStatusByChangeId",
query =
"SELECT id as id, status as status, data_values as data_values "
+ "FROM icreate_change "
+ "WHERE id = :changeId",
resultSetMapping = "ActiveTaskChangeMapping"
)
})
@Data
@Entity
@Table(name = "icreate_change")
public class ICreateChange {
public ICreateChange() {}
....
Have I missed something?
Stack Trace
org.hibernate.HibernateException: Got different size of tuples and aliases
at org.hibernate.jpa.spi.NativeQueryTupleTransformer$NativeTupleImpl.<init>(NativeQueryTupleTransformer.java:68) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.jpa.spi.NativeQueryTupleTransformer.transformTuple(NativeQueryTupleTransformer.java:28) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.hql.internal.HolderInstantiator.instantiate(HolderInstantiator.java:85) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:433) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.loader.Loader.list(Loader.java:2501) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2223) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1053) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:170) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.query.Query.getResultList(Query.java:135) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
Debugging
Debugging the implementation of NativeTupleImpl shows that the aliases and tuples are there, however there is a nesting problem. There is one tuple object with all values, but there are 3 aliases which are not nested and are as three entities. Which is causing the mismatch
Reference:
https://jira.spring.io/si/jira.issueviews:issue-html/DATAJPA-1280/DATAJPA-1280.html
"Got different size of tuples and aliases" exception after Spring Boot 2.0.0.RELEASE migration
