当前使用版本(必须填写清楚,否则不予处理)

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 queryWrapper = new QueryWrapper<>(); queryWrapper.eq("MESSAGEID", ""); iTrainMorxcService.count(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:数据源名称不要带下划线