GBase 8s
适配迁移
问答

ShardingJdbc5.4.1采用官方提供的示例,多参数分页查询失败

发表于2025-11-26 09:49:50137次浏览18个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: 3.6.3

【操作系统】:Centos7

【CPU】: x86

【问题描述】*:

Page<Admin> pageResult = adminDao
        .findAll((root, query, builder) -> buildAdminInfoQueryParams(root, builder),
                PageRequest.of(0,10));
System.out.println(pageResult.getContent());

 

 private Predicate buildAdminInfoQueryParams(Root<Admin> root, CriteriaBuilder builder) {
        List<Predicate> list = new ArrayList<>();

//多参数查询
        list.add(builder.like(root.get("role"), "%ROLE_OPERATOR%"));
        list.add(builder.like(root.get("role"), "%ROLE_OPERATOR%"));
        list.add(builder.like(root.get("role"), "%ROLE_OPERATOR%"));
//        list.add(builder.notEqual(root.get("status"), Status.DELETE));

        return builder.and(list.toArray(new Predicate[]{}));
    }

 

一个参数可以正常查询,如果参数超过1个,就会查询失败,报错内容:

Caused by: org.hibernate.exception.GenericJDBCException: JDBC exception executing SQL [select skip ? first ? a1_0.id,a1_0.create_time,a1_0.email,a1_0.name,a1_0.phone,a1_0.role,a1_0.sign_cert_sn,a1_0.sign_mechanism,a1_0.sign_server,a1_0.status,a1_0.update_time from t_admin a1_0 where a1_0.role like ? and a1_0.role like ? and a1_0.role like ?] [Unknown exception: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')] [n/a]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:63) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:264) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.getResultSet(DeferredResultSetAccess.java:167) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.advanceNext(JdbcValuesResultSetImpl.java:265) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.jdbc.internal.JdbcValuesResultSetImpl.processNext(JdbcValuesResultSetImpl.java:145) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.jdbc.internal.AbstractJdbcValues.next(AbstractJdbcValues.java:19) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.internal.RowProcessingStateStandardImpl.next(RowProcessingStateStandardImpl.java:67) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:204) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:211) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$2(ConcreteSqmSelectQueryPlan.java:139) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:382) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:302) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:526) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:423) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.hibernate.query.Query.getResultList(Query.java:120) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.readPage(SimpleJpaRepository.java:715) ~[spring-data-jpa-3.3.13.jar:3.3.13]
    at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:456) ~[spring-data-jpa-3.3.13.jar:3.3.13]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355) ~[spring-aop-6.1.21.jar:6.1.21]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.21.jar:6.1.21]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:173) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:148) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.21.jar:6.1.21]
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) ~[spring-data-commons-3.3.13.jar:3.3.13]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.21.jar:6.1.21]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) ~[spring-tx-6.1.21.jar:6.1.21]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-6.1.21.jar:6.1.21]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.21.jar:6.1.21]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) ~[spring-tx-6.1.21.jar:6.1.21]
    ... 33 common frames omitted
Caused by: java.sql.SQLException: Unknown exception: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
    at org.apache.shardingsphere.infra.exception.core.external.sql.ShardingSphereSQLException.toSQLException(ShardingSphereSQLException.java:62) ~[shardingsphere-infra-exception-core-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine.toSQLException(SQLExceptionTransformEngine.java:68) ~[shardingsphere-infra-exception-dialect-core-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.executeQuery(ShardingSpherePreparedStatement.java:258) ~[shardingsphere-jdbc-core-5.4.1.jar:5.4.1]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-5.1.0.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar:na]
    at org.hibernate.sql.results.jdbc.internal.DeferredResultSetAccess.executeQuery(DeferredResultSetAccess.java:246) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
    ... 73 common frames omitted
Caused by: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')
    at org.apache.shardingsphere.infra.binder.context.segment.select.pagination.PaginationContext.getValue(PaginationContext.java:57) ~[shardingsphere-infra-binder-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.infra.binder.context.segment.select.pagination.PaginationContext.<init>(PaginationContext.java:50) ~[shardingsphere-infra-binder-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.infra.binder.context.segment.select.pagination.engine.LimitPaginationContextEngine.createPaginationContext(LimitPaginationContextEngine.java:38) ~[shardingsphere-infra-binder-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.infra.binder.context.segment.select.pagination.engine.PaginationContextEngine.createPaginationContext(PaginationContextEngine.java:57) ~[shardingsphere-infra-binder-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext.setUpParameters(SelectStatementContext.java:397) ~[shardingsphere-infra-binder-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.createQueryContext(ShardingSpherePreparedStatement.java:569) ~[shardingsphere-jdbc-core-5.4.1.jar:5.4.1]
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.executeQuery(ShardingSpherePreparedStatement.java:235) ~[shardingsphere-jdbc-core-5.4.1.jar:5.4.1]
    ... 76 common frames omitted

评论

登录后才可以发表评论
用户头像
路路路发表于 8个月前
稍等
苏叶新城发表于 8个月前
@路路路:ok
用户头像
琳大大发表于 8个月前
昨天更新到shardingsphere5.4.1_1.0.0_5_8f6da7了,用的是最新版吗
苏叶新城发表于 8个月前
@琳大大:不是用的 shardingsphere5.4.1_1.0.0_1_cf41dd.zip 我用下新版试下
苏叶新城发表于 8个月前
@琳大大:能够提供541_modifycontent.diff 修复记录,我这边是用的5.5.0,之前根据这个修改记录适配的新版sharding
苏叶新城发表于 8个月前
@琳大大:采用最新版也是有同样的问题
用户头像
琳大大发表于 8个月前
@苏叶新城:已确认是bug,修复后我们更新新版到官网
用户头像
GBase用户28017发表于 8个月前
感觉和数据库关系不大。看看Hibernate。
苏叶新城发表于 8个月前
@GBase用户28017:不加sharding是没问题的,分析是sharding分页解析的问题,这部分是官方提供的例子里自定义的语法解析。
用户头像
GBase用户28017发表于 8个月前
再试。
用户头像
GBase用户28017发表于 8个月前
解决没
苏叶新城发表于 8个月前
@GBase用户28017:等官方解决
用户头像
GBase用户28017发表于 6个月前
解决没。
半夏发表于 2个月前
向大佬学习
GBase用户51820发表于 2个月前
好问题啊。
GBase用户51848发表于 2个月前
等待有缘人解答。
菲菲发表于 2个月前
坐等大佬解析。