【发布时间】:2023-01-07 07:59:20
【问题描述】:
随着 Micronaut 版本升级到 3.7.5/3.8.0,当列表具有单个元素时,存储库中带有 sql-IN 子句的自定义 @Query 不起作用。下面是堆栈跟踪日志,这在 micronaut:3.5.4 和 micronaut-data-processor:3.4.3 的旧版本中仍然有效。
堆栈跟踪:
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Collection (java.lang.String and java.util.Collection are in module java.base of loader 'bootstrap')
at io.micronaut.data.hibernate.operations.AbstractHibernateOperations$2.bindOne(AbstractHibernateOperations.java:403)
at io.micronaut.data.runtime.operations.internal.query.DefaultBindableParametersStoredQuery.bindParameter(DefaultBindableParametersStoredQuery.java:172)
at io.micronaut.data.runtime.operations.internal.query.DefaultBindableParametersStoredQuery.bindParameters(DefaultBindableParametersStoredQuery.java:84)
at io.micronaut.data.runtime.operations.internal.query.DefaultBindableParametersPreparedQuery.bindParameters(DefaultBindableParametersPreparedQuery.java:82)
at io.micronaut.data.runtime.operations.internal.query.BindableParametersPreparedQuery.bindParameters(BindableParametersPreparedQuery.java:51)
at io.micronaut.data.hibernate.operations.AbstractHibernateOperations.bindParameters(AbstractHibernateOperations.java:379)
at io.micronaut.data.hibernate.operations.AbstractHibernateOperations.bindPreparedQuery(AbstractHibernateOperations.java:431)
at io.micronaut.data.hibernate.operations.AbstractHibernateOperations.collectResults(AbstractHibernateOperations.java:364)
at io.micronaut.data.hibernate.operations.AbstractHibernateOperations.collectFindAll(AbstractHibernateOperations.java:306)
at io.micronaut.data.hibernate.operations.HibernateJpaOperations.lambda$findAll$7(HibernateJpaOperations.java:315)
at io.micronaut.transaction.support.AbstractSynchronousStateTransactionManager.execute(AbstractSynchronousStateTransactionManager.java:145)
at io.micronaut.transaction.support.AbstractSynchronousStateTransactionManager.executeRead(AbstractSynchronousStateTransactionManager.java:160)
at io.micronaut.transaction.support.AbstractSynchronousTransactionManager.executeRead(AbstractSynchronousTransactionManager.java:150)
at io.micronaut.data.hibernate.operations.HibernateJpaOperations.findAll(HibernateJpaOperations.java:313)
at io.micronaut.data.runtime.intercept.DefaultFindAllInterceptor.intercept(DefaultFindAllInterceptor.java:51)
at io.micronaut.data.runtime.intercept.DefaultFindAllInterceptor.intercept(DefaultFindAllInterceptor.java:35)
存储库方法
@Query(value = "Select * from table a where a.status in (:statuses)", nativeQuery = true)
List<Entity> findByStatus(List<String> statuses);
【问题讨论】:
标签: java micronaut micronaut-data micronaut.data.hibernate