APIJSON Version/APIJSON 版本号
7.0.3
Database Type & Version/数据库类型及版本号
msyql 8
Environment/环境信息
- JDK/基础库: oracle jdk 21
- OS/系统: macOS Sonoma
APIAuto Screenshots/APIAuto 请求与结果完整截屏
略
Current Behavior/问题描述
请求参数
{
"sumBizDict[]":{
"join":"</BusinessGroup:level2/parent_id@,</BusinessGroup:level3/parent_id@",
"BusinessGroup":{
"@column":"id;name",
"level":1
},
"BusinessGroup:level2":{
"parent_id@":"/BusinessGroup/id",
"level":2
},
"BusinessGroup:level3":{
"parent_id@":"/BusinessGroup:level2/id",
"level":3
}
}
}
响应信息:
{
"sumBizDict[]": {
"BusinessGroup": {
"@column": "id;name",
"level": 1
},
"BusinessGroup:level2": {
"parent_id@": "/BusinessGroup/id",
"level": 2
},
"BusinessGroup:level3": {
"parent_id@": "/BusinessGroup:level2/id",
"level": 3
},
"join": "</BusinessGroup:level2/parent_id@,</BusinessGroup:level3/parent_id@"
},
"ok": false,
"code": 500,
"msg": "Unknown column 'BusinessGroup:level2.id' in 'on clause'"
}
控制台异常及生成的SQL语句:
Consume Time:6 ms 2024-07-24 16:32:27
Execute SQL:SELECT `BusinessGroup`.`id`,`BusinessGroup`.`name`, `level2`.*, `level3`.* FROM `quick-boot-app-space`.`1813027492868489217_business_group` AS `BusinessGroup` LEFT JOIN ( SELECT * FROM `quick-boot-app-space`.`1813027492868489217_business_group` WHERE ( (`level` = 2) ) ) AS `level2` ON `level2`.`parent_id` = `BusinessGroup`.`id` LEFT JOIN ( SELECT * FROM `quick-boot-app-space`.`1813027492868489217_business_group` WHERE ( (`level` = 3) ) ) AS `level3` ON `level3`.`parent_id` = `BusinessGroup:level2`.`id` WHERE ( (`BusinessGroup`.`level` = 1) ) LIMIT 10
2024-07-24 04:32:27.688: AbstractParser.DEBUG: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
已执行 1/200 条 SQL
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apijson.orm.exception.CommonException: Unknown column 'BusinessGroup:level2.id' in 'on clause'
调试堆栈与问题代码:
Expected Behavior/期望结果
经调试,发现AbstractSQLConfig.concatJoinOn方法中有SQL语句拼接问题,
具体为AbstractSQLConfig 类的4819行和4831行 类似
sql += (first ? ON : AND) + quote + jt + quote + "." + quote + on.getKey() + quote + (isNot ? " != " : " = ")
+ quote + on.getTargetTable() + quote + "." + quote + on.getTargetKey() + quote;
改为
sql += (first ? ON : AND) + quote + jt + quote + "." + quote + on.getKey() + quote + (isNot ? " != " : " = ")
+ quote + on.getTargetAlias() + quote + "." + quote + on.getTargetKey() + quote;
Any additional comments?/其它补充说明?
No response
2条答案
按热度按时间sczxawaw1#
调试截屏
eimct9ow2#
赞,可以为 APIJSON 提交 PR 贡献,谢谢,开源要大家一起参与贡献才会更美好~
提 PR 贡献代码的步骤可参考:
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E5%AE%9A%E8%A6%81%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81