You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2019/01/22 11:02:52 UTC

[GitHub] ppj19891020 opened a new issue #1798: spring JPA simple sql update error

ppj19891020 opened a new issue #1798: spring JPA simple sql update error
URL: https://github.com/apache/incubator-shardingsphere/issues/1798
 
 
   ## Bug Report
   spring jpa update domain fail.
   
   junit test
   ```
   @Test
       public void testUpdateMessage(){
           Long traceId = 3324610450175559130l;
           List<MessagePo> messagePos = messageRepository.getByTraceId(traceId);
           MessagePo messagePo = messagePos.get(0);
           messagePo.setStatus(ClickRequest.Status.CLICKED.name());
           messageRepository.save(messagePo);
       }
   ```
   
   ### Which version of ShardingSphere did you use?
    Version: 3.0.0
   
   ### Which project did you use? Sharding-JDBC or Sharding-Proxy?
    Sharding-JDBC
   
   
   ### Expected behavior
   sql update success
   
   ### Actual behavior
   ```
   2019-01-22 18:46:19.471  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Rule Type: sharding
   2019-01-22 18:46:19.471  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Logic SQL: select messagepo0_.id as id1_0_, messagepo0_.appVersion as appVersi2_0_, messagepo0_.clickTime as clickTim3_0_, messagepo0_.devicePlatform as devicePl4_0_, messagepo0_.deviceToken as deviceTo5_0_, messagepo0_.jobId as jobId6_0_, messagepo0_.osVersion as osVersio7_0_, messagepo0_.sendTime as sendTime8_0_, messagepo0_.status as status9_0_, messagepo0_.traceId as traceId10_0_, messagepo0_.userId as userId11_0_ from push_message messagepo0_ where messagepo0_.traceId=?
   2019-01-22 18:46:19.471  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : SQLStatement: SelectStatement(super=DQLStatement(super=AbstractSQLStatement(type=DQL, tables=Tables(tables=[Table(name=push_message, alias=Optional.of(messagepo0_))]), conditions=Conditions(orCondition=OrCondition(andConditions=[AndCondition(conditions=[Condition(column=Column(name=traceId, tableName=push_message), operator=EQUAL, positionValueMap={}, positionIndexMap={0=0})])])), sqlTokens=[TableToken(skippedSchemaNameLength=0, originalLiterals=push_message)], parametersIndex=1)), containStar=false, selectListLastPosition=411, groupByLastPosition=0, items=[CommonSelectItem(expression=messagepo0_.devicePlatform, alias=Optional.of(devicePl4_0_)), CommonSelectItem(expression=messagepo0_.deviceToken, alias=Optional.of(deviceTo5_0_)), CommonSelectItem(expression=messagepo0_.status, alias=Optional.of(status9_0_)), CommonSelectItem(expression=messagepo0_.appVersion, alias=Optional.of(appVersi2_0_)), CommonSelectItem(expression=messagepo0_.osVersion, alias=Optional.of(osVersio7_0_)), CommonSelectItem(expression=messagepo0_.userId, alias=Optional.of(userId11_0_)), CommonSelectItem(expression=messagepo0_.clickTime, alias=Optional.of(clickTim3_0_)), CommonSelectItem(expression=messagepo0_.jobId, alias=Optional.of(jobId6_0_)), CommonSelectItem(expression=messagepo0_.traceId, alias=Optional.of(traceId10_0_)), CommonSelectItem(expression=messagepo0_.id, alias=Optional.of(id1_0_)), CommonSelectItem(expression=messagepo0_.sendTime, alias=Optional.of(sendTime8_0_))], groupByItems=[], orderByItems=[], limit=null, subQueryStatement=null)
   2019-01-22 18:46:19.472  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Actual SQL: ds2 ::: select messagepo0_.id as id1_0_, messagepo0_.appVersion as appVersi2_0_, messagepo0_.clickTime as clickTim3_0_, messagepo0_.devicePlatform as devicePl4_0_, messagepo0_.deviceToken as deviceTo5_0_, messagepo0_.jobId as jobId6_0_, messagepo0_.osVersion as osVersio7_0_, messagepo0_.sendTime as sendTime8_0_, messagepo0_.status as status9_0_, messagepo0_.traceId as traceId10_0_, messagepo0_.userId as userId11_0_ from push_message messagepo0_ where messagepo0_.traceId=? ::: [[3324610450175559130]]
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Rule Type: sharding
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Logic SQL: select messagepo0_.id as id1_0_0_, messagepo0_.appVersion as appVersi2_0_0_, messagepo0_.clickTime as clickTim3_0_0_, messagepo0_.devicePlatform as devicePl4_0_0_, messagepo0_.deviceToken as deviceTo5_0_0_, messagepo0_.jobId as jobId6_0_0_, messagepo0_.osVersion as osVersio7_0_0_, messagepo0_.sendTime as sendTime8_0_0_, messagepo0_.status as status9_0_0_, messagepo0_.traceId as traceId10_0_0_, messagepo0_.userId as userId11_0_0_ from push_message messagepo0_ where messagepo0_.id=?
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : SQLStatement: SelectStatement(super=DQLStatement(super=AbstractSQLStatement(type=DQL, tables=Tables(tables=[Table(name=push_message, alias=Optional.of(messagepo0_))]), conditions=Conditions(orCondition=OrCondition(andConditions=[])), sqlTokens=[TableToken(skippedSchemaNameLength=0, originalLiterals=push_message)], parametersIndex=1)), containStar=false, selectListLastPosition=433, groupByLastPosition=0, items=[CommonSelectItem(expression=messagepo0_.osVersion, alias=Optional.of(osVersio7_0_0_)), CommonSelectItem(expression=messagepo0_.sendTime, alias=Optional.of(sendTime8_0_0_)), CommonSelectItem(expression=messagepo0_.userId, alias=Optional.of(userId11_0_0_)), CommonSelectItem(expression=messagepo0_.status, alias=Optional.of(status9_0_0_)), CommonSelectItem(expression=messagepo0_.id, alias=Optional.of(id1_0_0_)), CommonSelectItem(expression=messagepo0_.traceId, alias=Optional.of(traceId10_0_0_)), CommonSelectItem(expression=messagepo0_.appVersion, alias=Optional.of(appVersi2_0_0_)), CommonSelectItem(expression=messagepo0_.clickTime, alias=Optional.of(clickTim3_0_0_)), CommonSelectItem(expression=messagepo0_.jobId, alias=Optional.of(jobId6_0_0_)), CommonSelectItem(expression=messagepo0_.deviceToken, alias=Optional.of(deviceTo5_0_0_)), CommonSelectItem(expression=messagepo0_.devicePlatform, alias=Optional.of(devicePl4_0_0_))], groupByItems=[], orderByItems=[], limit=null, subQueryStatement=null)
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Actual SQL: ds0 ::: select messagepo0_.id as id1_0_0_, messagepo0_.appVersion as appVersi2_0_0_, messagepo0_.clickTime as clickTim3_0_0_, messagepo0_.devicePlatform as devicePl4_0_0_, messagepo0_.deviceToken as deviceTo5_0_0_, messagepo0_.jobId as jobId6_0_0_, messagepo0_.osVersion as osVersio7_0_0_, messagepo0_.sendTime as sendTime8_0_0_, messagepo0_.status as status9_0_0_, messagepo0_.traceId as traceId10_0_0_, messagepo0_.userId as userId11_0_0_ from push_message messagepo0_ where messagepo0_.id=? ::: [[4657956192256]]
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Actual SQL: ds1 ::: select messagepo0_.id as id1_0_0_, messagepo0_.appVersion as appVersi2_0_0_, messagepo0_.clickTime as clickTim3_0_0_, messagepo0_.devicePlatform as devicePl4_0_0_, messagepo0_.deviceToken as deviceTo5_0_0_, messagepo0_.jobId as jobId6_0_0_, messagepo0_.osVersion as osVersio7_0_0_, messagepo0_.sendTime as sendTime8_0_0_, messagepo0_.status as status9_0_0_, messagepo0_.traceId as traceId10_0_0_, messagepo0_.userId as userId11_0_0_ from push_message messagepo0_ where messagepo0_.id=? ::: [[4657956192256]]
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Actual SQL: ds2 ::: select messagepo0_.id as id1_0_0_, messagepo0_.appVersion as appVersi2_0_0_, messagepo0_.clickTime as clickTim3_0_0_, messagepo0_.devicePlatform as devicePl4_0_0_, messagepo0_.deviceToken as deviceTo5_0_0_, messagepo0_.jobId as jobId6_0_0_, messagepo0_.osVersion as osVersio7_0_0_, messagepo0_.sendTime as sendTime8_0_0_, messagepo0_.status as status9_0_0_, messagepo0_.traceId as traceId10_0_0_, messagepo0_.userId as userId11_0_0_ from push_message messagepo0_ where messagepo0_.id=? ::: [[4657956192256]]
   2019-01-22 18:46:20.171  INFO 24457 --- [           main] Sharding-Sphere-SQL                      : Actual SQL: ds3 ::: select messagepo0_.id as id1_0_0_, messagepo0_.appVersion as appVersi2_0_0_, messagepo0_.clickTime as clickTim3_0_0_, messagepo0_.devicePlatform as devicePl4_0_0_, messagepo0_.deviceToken as deviceTo5_0_0_, messagepo0_.jobId as jobId6_0_0_, messagepo0_.osVersion as osVersio7_0_0_, messagepo0_.sendTime as sendTime8_0_0_, messagepo0_.status as status9_0_0_, messagepo0_.traceId as traceId10_0_0_, messagepo0_.userId as userId11_0_0_ from push_message messagepo0_ where messagepo0_.id=? ::: [[4657956192256]]
   2019-01-22 18:46:20.188  INFO 24457 --- [           main] o.h.e.internal.DefaultLoadEventListener  : HHH000327: Error performing load command : org.hibernate.HibernateException: More than one row with the given identifier was found: 4657956192256, for class: com.dxy.platform.push.sharding.domain.MessagePo
   
   org.springframework.orm.jpa.JpaSystemException: More than one row with the given identifier was found: 4657956192256, for class: com.dxy.platform.push.sharding.domain.MessagePo; nested exception is org.hibernate.HibernateException: More than one row with the given identifier was found: 4657956192256, for class: com.dxy.platform.push.sharding.domain.MessagePo
   
   	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:333)
   	at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244)
   	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:525)
   	at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
   	at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:209)
   	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147)
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
   	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
   	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
   	at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
   	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
   	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
   	at com.sun.proxy.$Proxy128.save(Unknown Source)
   ```
   
   ### Reason analyze (If you can)
   
   
   ### Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.
   table: push_message
   KeyGeneratorColumnName:traceId
   ```
       @Bean(name = "shardingDataSource")
       public DataSource shardingDataSource() throws SQLException {
           // 配置真实数据源
           Map<String, DataSource> dataSourceMap = new HashMap<>();
           dataSourceMap.put("ds0",sharding01DataSource());
           dataSourceMap.put("ds1",sharding02DataSource());
           dataSourceMap.put("ds2",sharding03DataSource());
           dataSourceMap.put("ds3",sharding04DataSource());
   
           // 配置Order表规则
           TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration();
           orderTableRuleConfig.setLogicTable("push_message");
           orderTableRuleConfig.setActualDataNodes("ds${0..3}.push_message");
   
           //分布式主键
           orderTableRuleConfig.setKeyGeneratorColumnName("id");
           orderTableRuleConfig.setKeyGenerator(shardingKeygen);
   
           // 配置分库 + 分表策略
           orderTableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("traceId", "ds${traceId % 4}"));
   
           // 配置分片规则
           ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
           shardingRuleConfig.getTableRuleConfigs().add(orderTableRuleConfig);
   
           //配置项
           Properties properties = new Properties();
           properties.setProperty("sql.show","true");
           DataSource dataSource = ShardingDataSourceFactory.createDataSource(
                   dataSourceMap, shardingRuleConfig, new ConcurrentHashMap(), properties);
           return dataSource;
       }
   ```
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services