遇到的异常:Cause: org.apache.shardingsphere.infra.exception.ShardingSphereException: The table inserted and the table selected must be the same or bind tables.
sql:
insert into t_history (id, name,create_time, modify_time) select id, name, create_time, modify_time from t_resource where id = #{id}
sharding-jdbc是不支持这种sql语句的,sharding-jdbc对于很多不常见的写法都不支持。
sharding-jdbc不支持项如何查看?
1、官网可查看:JDBC不支持项
2、这个包下面也可以查看:(版本号:5.0.0-alpha)
org.apache.shardingsphere.driver.jdbc.unsupported
3、其他博主的总结:sharding-jdbc SQL支持详细列表
那么该如何解决呢?
1、重写sql语句。
如果是老项目,可能会有对代码改动量有点大。我对上面的一个sql重写后,改动了五个文件,而且需要花费一定的时间排查哪些sql是需要重写的。
2、配置多数据源
比如:配置两个数据源,一个sharding-jdbc的数据源,一个普通的数据源。听前辈说,这种方式有事务失效的风险,虽然可以避免,但是开发人员可能会忘记避免这个风险。
配置方案见其他博主:解决Sharding-jdbc不支持sql问题