SOQL多层父子关系查询报错(API 60):无法查询超1层级聚合关系
解决方案:多级SOQL子查询报错排查
核心排查点
虽然API 60确实支持最多5级的子查询嵌套,但报错通常来自以下几个容易忽略的细节:
1. 确认子查询的关系API名称正确
Salesforce子查询中使用的关系名是子对象指向父对象的关系字段的复数API名称,必须完全匹配:
- 检查
OrderDestinations__c上指向Order__c的主明细字段,查看其"Child Relationship Name"属性,确认是否为OrderDestinations__r - 同理检查
OrderDestinationItems__c上指向OrderDestinations__c的关系字段,确认子关系名称是OrderDestinationItems__r
2. 确保Apex类的API版本与组织版本一致
即使组织默认API版本是60,如果当前编写代码的Apex类的API版本低于58(Salesforce从API 58开始支持5级子查询),依然会触发旧版本的限制:
- 编辑Apex类,在版本选择器中设置为60后重新保存测试
3. 验证关系类型的有效性
确保三级对象间的关系都是标准的主明细或Lookup关系:
Order__c↔OrderDestinations__c是主明细关系OrderDestinations__c↔OrderDestinationItems__c是主明细或Lookup关系(两种类型都支持多级子查询)
4. 逐步简化查询测试
先验证两级查询是否正常运行,排除上层关系的问题:
// 先测试两级查询 List<Order__c> testList = [SELECT Id, (SELECT Id FROM OrderDestinations__r) FROM Order__c];
如果两级查询正常,再添加孙对象的子查询,确认语法和关系名无误。
修正后的示例代码
确认所有关系名称和版本正确后,原查询的语法是合法的,示例如下:
List<Order__c> orderList = [ SELECT Id, (SELECT Id, (SELECT Id FROM OrderDestinationItems__r) FROM OrderDestinations__r) FROM Order__c ];
内容的提问来源于stack exchange,提问作者SeekerOfKnowledge
相关产品推荐
相关产品推荐

