当前使用版本(必须填写清楚,否则不予处理)
3.1.2
该问题是怎么引起的?(最新版上已修复的会直接close掉)
如果使用QueryWrapper形式,可以查询。如果改为lambdaQuery()链式查询,就会报表或视图不存在。
重现步骤
同上
报错信息
Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在
Comment From: miemieYaho
给出你的复现demo
Comment From: miRUAcleInjoker
给出你的复现demo
QueryWrapper<TrainMorxc> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ZMLM", zmlm);
queryWrapper.orderByDesc("MESSAGEID");
this.iTrainMorxcService.page(page, queryWrapper);
上面用 QueryWrapper是可以查询的。
改成
this.iTrainMorxcService.lambdaQuery().eq(TrainMorxc::getZmlm, zmlm).orderByDesc(TrainMorxc::getMessageid).list();
就会报 ORA-00942: 表或视图不存在
Comment From: miemieYaho
你这就玄幻了,这俩本质上都是一样的
Comment From: miRUAcleInjoker
` @Test
public void testXcService() {
QueryWrapper
iTrainMorxcService.lambdaQuery().eq(TrainMorxc::getMessageid, "").count();
}`
然后控制台打印:
第一个查询是正确的。
==> Preparing: SELECT COUNT( 1 ) FROM TB_TRAIN_MORXC WHERE MESSAGEID = ?
==> Parameters: (String)
<== Total: 1
第二个lambda的就会报错: `==> Preparing: SELECT COUNT( 1 ) FROM TB_TRAIN_MORXC WHERE MESSAGEID = ? ==> Parameters: (String) org.springframework.jdbc.BadSqlGrammarException:
Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在`
所以我猜测会不会是lambda和动态数据源有关。
@DS(value = "slave_1")
Comment From: miemieYaho
看你怎么动态了,自己排查吧
Comment From: miRUAcleInjoker
好的,多谢关注
Comment From: quuee
比如两个数据源db_1,db_2。自带的查询方法查询db_2的user表,@DS指定了db_2,但是生成的表明会是db_1.user,然后找不到。 解决办法1:自己写sql,且在sql中指定库名,如:select * from [db_2].t_user。 解决办法2:数据源名称不要带下划线