当前使用版本(必填,否则不予处理)
3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
Wrapper<UploadSession> condwrap = Wrappers.<UploadSession>lambdaQuery().select(UploadSession::getUuid, UploadSession::getBlockId)
.eq(UploadSession::getStatus, EStatus.PROGRESS)
.eq(UploadSession::getContentAnalyze, EContentAnalyze.NOT);
List<UploadSession> list1 = uploadSessionMapper.selectList(condwrap);
selectList能够得到正确的resultset, 但不能映射给相应的实体
重现步骤(如果有就写完整)
我用micronaut, 因此是手动做的依赖注入:
@Slf4j
@Factory
public class MybatisPlusFactory {
@Value("${mybatis-plus.mapperPackage:tech.zxcloud.service.ufs.mybatis.mapper}")
String mapperPackage;
@Value("${mybatis-plus.mapperLocation:`classpath:mapper/**/*.xml`}")
String xmlMapperLocation;
@EachBean(MybatisSqlSessionFactoryBean.class)
SqlSessionFactory initSqlSessionFactory(MybatisSqlSessionFactoryBean factoryBean) throws Exception {
return factoryBean.getObject();
}
@EachBean(DataSource.class)
MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource ds) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setTypeEnumsPackage("tech.zxcloud.service.ufs.mybatis.enums");
factoryBean.setTypeHandlersPackage("tech.zxcloud.service.ufs.mybatis.handler");
Resource[] res = ResourcePatternUtils.getResourcePatternResolver(null).getResources(xmlMapperLocation);
factoryBean.setMapperLocations(res);
factoryBean.setDataSource(ds);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.addMappers(mapperPackage);
configuration.setLogImpl(StdOutImpl.class);
factoryBean.setConfiguration(configuration);
factoryBean.afterPropertiesSet();
return factoryBean;
}
}
在测试用例中进行的测试
@Test
void mapper3() {
try(SqlSession session = sessionFactory.openSession()) {
UploadSessionMapper uploadSessionMapper = session.getMapper(UploadSessionMapper.class);
Wrapper<UploadSession> condwrap = Wrappers.<UploadSession>lambdaQuery().select(UploadSession::getUuid, UploadSession::getBlockId)
.eq(UploadSession::getStatus, EStatus.PROGRESS)
.eq(UploadSession::getContentAnalyze, EContentAnalyze.NOT);
List<Map<String,Object>> list2 = uploadSessionMapper.selectMaps(condwrap);
log.info("list2:{}", list2);
List<UploadSession> list1 = uploadSessionMapper.selectList(condwrap);
log.info("list1:{}", list1);
}
}
调用selectMaps得到list2是可以拿到正确的结果的, 测试环境只有两条信息
报错信息
报错之前的调试信息
17:20:52.631 [main] DEBUG t.z.s.u.m.m.U.selectMaps - ==> Preparing: SELECT uuid,block_id FROM upload_session WHERE (status = ? AND content_analyze = ?)
17:20:52.650 [main] DEBUG t.z.s.u.m.m.U.selectMaps - ==> Parameters: PROGRESS(String), 0(Integer)
17:20:52.664 [main] TRACE t.z.s.u.m.m.U.selectMaps - <== Columns: uuid, block_id
17:20:52.664 [main] TRACE t.z.s.u.m.m.U.selectMaps - <== Row: 15be899c-e748-422a-bb68-cc86ddc9b706, 6688819309021499392
17:20:52.666 [main] TRACE t.z.s.u.m.m.U.selectMaps - <== Row: 2d78e5e1-2646-471c-840f-97a9e5cf63ce, 6688973891185938432
17:20:52.667 [main] DEBUG t.z.s.u.m.m.U.selectMaps - <== Total: 2
17:20:52.671 [main] INFO tech.zxcloud.BioimageServiceTest - list2:[{uuid=15be899c-e748-422a-bb68-cc86ddc9b706, block_id=6688819309021499392}, {uuid=2d78e5e1-2646-471c-840f-97a9e5cf63ce, block_id=6688973891185938432}]
17:20:52.672 [main] DEBUG t.z.s.u.m.m.U.selectList - ==> Preparing: SELECT uuid,block_id FROM upload_session WHERE (status = ? AND content_analyze = ?)
17:20:52.672 [main] DEBUG t.z.s.u.m.m.U.selectList - ==> Parameters: PROGRESS(String), 0(Integer)
17:20:52.673 [main] TRACE t.z.s.u.m.m.U.selectList - <== Columns: uuid, block_id
17:20:52.674 [main] TRACE t.z.s.u.m.m.U.selectList - <== Row: 15be899c-e748-422a-bb68-cc86ddc9b706, 6688819309021499392
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
### The error may exist in tech/zxcloud/service/ufs/mybatis/mapper/UploadSessionMapper.java (best guess)
### The error may involve tech.zxcloud.service.ufs.mybatis.mapper.UploadSessionMapper.selectList
### The error occurred while handling results
### SQL: SELECT uuid,block_id FROM upload_session WHERE (status = ? AND content_analyze = ?)
### Cause: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:177)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96)
at com.sun.proxy.$Proxy37.selectList(Unknown Source)
at tech.zxcloud.BioimageServiceTest.mapper3(BioimageServiceTest.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:212)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:208)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createUsingConstructor(DefaultResultSetHandler.java:669)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createByConstructorSignature(DefaultResultSetHandler.java:654)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:618)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:591)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:397)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:67)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:163)
at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:90)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
... 69 more
Comment From: miemieYaho
你entity有无参构造吗?
Comment From: TudoRex
你entity有无参构造吗?
@Data
@Builder
@TableName("upload_session")
public class UploadSession {
@TableId
UUID uuid;
Long blockId;
String name;
Long size;
String type;
Long lastModified;
LocalDateTime statusUpdateAt;
EStatus status;
EContentAnalyze contentAnalyze;
}
我是按官网教程配的entity
Comment From: TudoRex
重新测试了下, 确实是Entity注解的问题, 去掉@Builder后可以了