"where" 限制不适用于带有 join 子句的 hql 查询
"where" restrictions not working on hql query with join clause
首先说明我对数据库很烂,所以请不要对我的代码有任何恶意:P
我在使用连接和限制查询休眠时遇到问题。我有一长串 Assignments
,其中一些有一个 Asr
对象。
queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract("
+ " assignment.id, assignment.contract.assignmentStatus,"
+ " assignment.contract.beginDate, assignment.contract.endDate,"
+ " assignment.contract.contractType, assignment.organizationalData.homeCountryKey,"
+ " assignment.organizationalData.hostCountryKey,"
+ " assignment.organizationalData.homeOrgUnitKey,"
+ " assignment.associate.globalIdAssociate,"
+ " assignment.associate.localIdHome,"
+ " assignment.associate.firstName,"
+ " assignment.associate.lastName)"
+ " from Assignment assignment left join assignment.asr asr"
+ " where assignment.contract.assignmentStatus.code = 5"
+ " and asr.homeAsrElegibility is not 'X'"
+ " or asr.homeAsrElegibility is null"
);
我正在逐步创建此查询。在我创建它之前没有连接子句 left join assignment.asr asr
并且它运行良好但当然它没有显示没有 Asr
对象的 Assignments
。添加 join 子句后,现在它显示每个 Assignment
(当拥有 assignmentStatus = 5
的人只有 4.000 时,有 10.000 条记录)和
之类的限制
where assignment.contract.assignmentStatus.code = 5
不再反映在结果中。
所以总结一下:我需要一个列表,其中包含所有 assignmentStatus = 5 和 asr.homeAsrElegibility != 'X' 的作业。但它还需要包括所有 assignmentStatus = 5 的分配,即使它们没有 Asr 对象。
有什么想法吗??谢谢!
括号有助于澄清情况。
queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract("
+ " assignment.id, assignment.contract.assignmentStatus,"
+ " assignment.contract.beginDate, assignment.contract.endDate,"
+ " assignment.contract.contractType, assignment.organizationalData.homeCountryKey,"
+ " assignment.organizationalData.hostCountryKey,"
+ " assignment.organizationalData.homeOrgUnitKey,"
+ " assignment.associate.globalIdAssociate,"
+ " assignment.associate.localIdHome,"
+ " assignment.associate.firstName,"
+ " assignment.associate.lastName)"
+ " from Assignment assignment left join assignment.asr asr"
+ " where assignment.contract.assignmentStatus.code = 5"
+ " and ((asr.homeAsrElegibility is not null and asr.homeAsrElegibility is not 'X')"
+ " or (asr.homeAsrElegibility is null))"
);
首先说明我对数据库很烂,所以请不要对我的代码有任何恶意:P
我在使用连接和限制查询休眠时遇到问题。我有一长串 Assignments
,其中一些有一个 Asr
对象。
queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract("
+ " assignment.id, assignment.contract.assignmentStatus,"
+ " assignment.contract.beginDate, assignment.contract.endDate,"
+ " assignment.contract.contractType, assignment.organizationalData.homeCountryKey,"
+ " assignment.organizationalData.hostCountryKey,"
+ " assignment.organizationalData.homeOrgUnitKey,"
+ " assignment.associate.globalIdAssociate,"
+ " assignment.associate.localIdHome,"
+ " assignment.associate.firstName,"
+ " assignment.associate.lastName)"
+ " from Assignment assignment left join assignment.asr asr"
+ " where assignment.contract.assignmentStatus.code = 5"
+ " and asr.homeAsrElegibility is not 'X'"
+ " or asr.homeAsrElegibility is null"
);
我正在逐步创建此查询。在我创建它之前没有连接子句 left join assignment.asr asr
并且它运行良好但当然它没有显示没有 Asr
对象的 Assignments
。添加 join 子句后,现在它显示每个 Assignment
(当拥有 assignmentStatus = 5
的人只有 4.000 时,有 10.000 条记录)和
where assignment.contract.assignmentStatus.code = 5
不再反映在结果中。
所以总结一下:我需要一个列表,其中包含所有 assignmentStatus = 5 和 asr.homeAsrElegibility != 'X' 的作业。但它还需要包括所有 assignmentStatus = 5 的分配,即使它们没有 Asr 对象。
有什么想法吗??谢谢!
括号有助于澄清情况。
queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract("
+ " assignment.id, assignment.contract.assignmentStatus,"
+ " assignment.contract.beginDate, assignment.contract.endDate,"
+ " assignment.contract.contractType, assignment.organizationalData.homeCountryKey,"
+ " assignment.organizationalData.hostCountryKey,"
+ " assignment.organizationalData.homeOrgUnitKey,"
+ " assignment.associate.globalIdAssociate,"
+ " assignment.associate.localIdHome,"
+ " assignment.associate.firstName,"
+ " assignment.associate.lastName)"
+ " from Assignment assignment left join assignment.asr asr"
+ " where assignment.contract.assignmentStatus.code = 5"
+ " and ((asr.homeAsrElegibility is not null and asr.homeAsrElegibility is not 'X')"
+ " or (asr.homeAsrElegibility is null))"
);