繁体   English   中英

使用join子句的hql查询不起作用的“ where”限制

[英]“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 asrleft 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM