apache / apache/incubator-seata
Oracle 批量入库Sql未结束
- Dominant language
- Java
- Stars
- 26k
- Forks
- 8.8k
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 4
Description
- [x] I have searched the [issues](https://github.com/seata/seata/issues) of this repository and believe that this is not a duplicate.
### Ⅰ. Issue Description
Java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
### Ⅱ. Describe what happened
在Docker+Openshift环境中,我们使用的是dubbo 的微服务架构,上个礼拜发现mybatis 批量入库oracle 出现异常,异常信息Java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended。 经过我们单测和swagger 模拟接口数据调用发现都无法重现此问题。 后面经过进一步和其他团队沟通,发现他们在调用我们接口的时候的函数上加了分布式事务。今天我们让对方注释掉分布式事务注解后,发现此问题居然没有出现了,因此怀疑是否是Seata中的分布式事务导致,特来此询问。
```
Mybatis sql如下:
INSERT into patient_bill_detail
(ID, EMR_DETAIL_NO, VISIT_NO, VISIT_TYPE, FFS_FLAG, BILLING_ITEM_ID, BILLING_ITEM_NAME, BILLING_ITEM_CATEGORY_ID, BILLING_ITEM_CATEGORY_DESC,
OPEN_DEPT,DOCTOR,AMOUNT,PRICE,COST,OBJECTION_FLAG,AMEND_DESC,PRODUCE_TIME,CREATED_AT,UPDATED_BY,UPDATED_AT,VERSION,OPEN_DEPT_DESC,
FREE_FLAG,DISCOUNT,DOCTOR_ID,DOCTOR_ACCOUNT_CODE,BILLING_ITEM_GROUP_ID,GLOBAL_DISCOUNT_FLAG)
select
#{patientBillDetail.id},#{patientBillDetail.emrDetailNo},#{patientBillDetail.visitNo},#{patientBillDetail.visitType},
#{patientBillDetail.ffsFlag},#{patientBillDetail.billingItemId},#{patientBillDetail.billingItemName},
#{patientBillDetail.billingItemCategoryId},#{patientBillDetail.billingItemCategoryDesc},#{patientBillDetail.openDept},
#{patientBillDetail.doctor},#{patientBillDetail.amount},#{patientBillDetail.price},#{patientBillDetail.cost},
#{patientBillDetail.objectionFlag},#{patientBillDetail.amendDesc},#{patientBillDetail.produceTime},
#{patientBillDetail.createdAt},#{patientBillDetail.updatedBy},sysdate,0,#{patientBillDetail.openDeptDesc},#{patientBillDetail.freeFlag},#{patientBillDetail.discount},
#{patientBillDetail.doctorId},#{patientBillDetail.doctorAccountCode},#{patientBillDetail.billingItemGroupId},#{patientBillDetail.globalDiscountFlag}
from dual
Mapper 接口代码如下:
int insertBatch(@Param("patientBillDetails") List patientBillDetails);
单元测试代码如下:
@Test
public void testInsertBatch() {
List list = new ArrayList<>();
Date date = new Date();
for (int i = 0; i < 10; i++) {
PatientBillDetail patientBillDetail = new PatientBillDetail();
patientBillDetail.setAmount(new BigDecimal("1000"));
patientBillDetail.setAmendDesc("test amend");
patientBillDetail.setBillingItemCategoryDesc("test category");
patientBillDetail.setBillingItemCategoryId(UUID.randomUUID().toString());
patientBillDetail.setBillingItemGroupId(UUID.randomUUID().toString());
patientBillDetail.setBillingItemId(UUID.randomUUID().toString());
patientBillDetail.setBillingItemName("ORAL GLUCOSE TOLERANCE TEST (0,1,2 HR)");
patientBillDetail.setCost(new BigDecimal("100"));
patientBillDetail.setDiscount(new BigDecimal("100"));
patientBillDetail.setDoctor("EMRO1 ;");
patientBillDetail.setDoctorAccountCode(" ;TEST ");
patientBillDetail.setDoctorId("EMR01");
patientBillDetail.setEmrDetailNo(UUID.randomUUID().toString());
patientBillDetail.setFfsFlag("1");
patientBillDetail.setFreeFlag(true);
patientBillDetail.setGlobalDiscountFlag("1");
patientBillDetail.setId(UUID.randomUUID().toString());
patientBillDetail.setObjectionFlag(true);
patientBillDetail.setOpenDept("test ;");
patientBillDetail.setOpenDeptDesc("test ;");
patientBillDetail.setPrice(new BigDecimal(i));
patientBillDetail.setProduceTime(date);
patientBillDetail.setVisitNo("1");
patientBillDetail.setVisitType("1");
list.add(patientBillDetail);
}
patientBillDetailMapper.insertBatch(list);
}
环境上异常日志如下:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
### The error may involve com.ewell.bill.mapper.PatientBillDetailMapper.insertBatch-Inline
### The error occurred while setting parameters
### SQL: INSERT into patient_bill_detail (ID, EMR_DETAIL_NO, VISIT_NO, VISIT_TYPE, FFS_FLAG, BILLING_ITEM_ID, BILLING_ITEM_NAME, BILLING_ITEM_CATEGORY_ID, BILLING_ITEM_CATEGORY_DESC, OPEN_DEPT,DOCTOR,AMOUNT,PRICE,COST,OBJECTION_FLAG,AMEND_DESC,PRODUCE_TIME,CREATED_AT,UPDATED_BY,UPDATED_AT,VERSION,OPEN_DEPT_DESC, FREE_FLAG,DISCOUNT,DOCTOR_ID,DOCTOR_ACCOUNT_CODE,BILLING_ITEM_GROUP_ID,GLOBAL_DISCOUNT_FLAG) select ?,?,?,?, ?,?,?, ?,?,?, ?,?,?,?, ?,?,?, ?,?,sysdate,0,?,?,?, ?,?,?,? from dual
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy137.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy182.insertBatch(Unknown Source)
at com.ewell.bill.component.BillPublicComponent.saveNewestBillDetail(BillPublicComponent.java:722)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl.emrSubmitToBill(BillInfoServiceImpl.java:432)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl.billResultCallback(BillInfoServiceImpl.java:342)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl$$FastClassBySpringCGLIB$$6c989bba.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl$$EnhancerBySpringCGLIB$$608891b7.billResultCallback()
at com.alibaba.dubbo.common.bytecode.Wrapper20.invokeMethod(Wrapper20.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:76)
at com.alibaba.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:52)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
at com.ewell.bill.config.BillingLogFilter.invoke(BillingLogFilter.java:48)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:68)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.filter.ProviderExceptionFilter.invoke(ProviderExceptionFilter.java:30)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:62)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.starter.jaeger.opentracing.filter.OpenTracingFilter.processProviderTrace(OpenTracingFilter.java:99)
at co.faao.plugin.starter.jaeger.opentracing.filter.OpenTracingFilter.invoke(OpenTracingFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.starter.dubbo.filter.UserFilter.invoke(UserFilter.java:39)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:73)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:138)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:104)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:96)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:172)
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51)
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)
at io.seata.rm.datasource.PreparedStatementProxy.lambda$execute$0(PreparedStatementProxy.java:54)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:119)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:61)
at io.seata.rm.datasource.PreparedStatementProxy.execute(PreparedStatementProxy.java:54)
at sun.reflect.GeneratedMethodAccessor450.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
at com.sun.proxy.$Proxy236.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
at sun.reflect.GeneratedMethodAccessor750.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy234.update(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at sun.reflect.GeneratedMethodAccessor565.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy233.update(Unknown Source)
at sun.reflect.GeneratedMethodAccessor565.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy233.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
at sun.reflect.GeneratedMethodAccessor828.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 57 common frames omitted
2020-09-02 13:41:21,061 ERROR [billing-bill-ewell] [DubboServerHandler-10.131.5.202:20880-thread-200] [c.f.plugin.transmission.EmrCodeUtils:67] - trace[6c2e8fa1f2742e9a747ed07d7096b849:c696e83a7f7cc343:ea17657223a10c83:1] 服务异常:com.ewell.bill.dubbo.IBillInfoService:billResultCallback
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1376)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)
at io.seata.rm.datasource.PreparedStatementProxy.lambda$execute$0(PreparedStatementProxy.java:54)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:119)
at io.seata.rm.datasource.exec.ExecuteTemplate.execute(ExecuteTemplate.java:61)
at io.seata.rm.datasource.PreparedStatementProxy.execute(PreparedStatementProxy.java:54)
at sun.reflect.GeneratedMethodAccessor450.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
at com.sun.proxy.$Proxy236.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
at sun.reflect.GeneratedMethodAccessor750.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy234.update(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at sun.reflect.GeneratedMethodAccessor565.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy233.update(Unknown Source)
at sun.reflect.GeneratedMethodAccessor565.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
at com.sun.proxy.$Proxy233.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
at sun.reflect.GeneratedMethodAccessor828.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
at com.sun.proxy.$Proxy137.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy182.insertBatch(Unknown Source)
at com.ewell.bill.component.BillPublicComponent.saveNewestBillDetail(BillPublicComponent.java:722)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl.emrSubmitToBill(BillInfoServiceImpl.java:432)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl.billResultCallback(BillInfoServiceImpl.java:342)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl$$FastClassBySpringCGLIB$$6c989bba.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
at com.ewell.bill.service.impl.dubbo.BillInfoServiceImpl$$EnhancerBySpringCGLIB$$608891b7.billResultCallback()
at com.alibaba.dubbo.common.bytecode.Wrapper20.invokeMethod(Wrapper20.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:76)
at com.alibaba.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:52)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
at com.ewell.bill.config.BillingLogFilter.invoke(BillingLogFilter.java:48)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:68)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.filter.ProviderExceptionFilter.invoke(ProviderExceptionFilter.java:30)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:62)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.starter.jaeger.opentracing.filter.OpenTracingFilter.processProviderTrace(OpenTracingFilter.java:99)
at co.faao.plugin.starter.jaeger.opentracing.filter.OpenTracingFilter.invoke(OpenTracingFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at co.faao.plugin.starter.dubbo.filter.UserFilter.invoke(UserFilter.java:39)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:73)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:138)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:104)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:96)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:172)
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51)
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
```
### Ⅲ. Describe what you expected to happen
### Ⅴ. Anything else we need to know?
1. 此接口会调用其他团队的接口聚合数据
2. 存在本地数据库事务
3. 批量入库
4. 代码中同样存在其他的接口 采用相同的sql形式 进行批量入库操作,但是无分布式事务并且批量入库成功
5. dubbo + zookeeper
6. 使用SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH) for循环入库是成功的
### Ⅵ. Environment:
- JDK version : k8s openJdk, 本地 Java8
- OS : docker + openshift
- Others:
Contributor guide
Research direction
Start with the MyBatis insertBatch mapper SQL and the testInsertBatch reproduction described in the report, then trace the Seata AlibabaDubboTransactionPropagationFilter path shown in the stack trace. Reproduce the ORA-00933 failure with Oracle inside the distributed-transaction flow and compare it with the non-transactional case; done means the batch insert succeeds or the supported limitation is clearly documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, sql
- Domain
- backend, databases, distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100