【问题标题】:Micronaut-data-hibernate<3.8.1> : class java.lang.String cannot be cast to class java.util.CollectionMicronaut-data-hibernate<3.8.1>:无法将类 java.lang.String 转换为类 java.util.Collection
【发布时间】: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


    【解决方案1】:

    我通过将您的代码调整为我的一个存储库接口来测试您的案例。我能够使用 MN 3.8、Kotlin 1.8 和 micronaut-data-hibernate-jpa:3.8.1 重现错误。

    代码正在通过 micronaut-data-hibernate-jpa:3.9.1 的测试,这是 MN 3.8.0 的默认设置。请注意,写这篇文章时 micronaut-data-hibernate-jpa:3.9.3 是最新的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多