[英]“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
将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'。 但是,即使它们没有Asr对象,也需要包括所有带有assignmentStatus = 5的分配。
有任何想法吗?? 谢谢!
括号有助于弄清情况。
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))"
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.