Sql &引用;其中;不使用join子句处理hql查询的限制

Sql &引用;其中;不使用join子句处理hql查询的限制,sql,hibernate,join,hql,Sql,Hibernate,Join,Hql,首先要澄清的是,我对数据库的使用非常糟糕,所以请不要用我的代码:p 我对使用联接和限制的hibernate查询有问题。我有一个巨大的作业列表,其中一些有一个Asr对象 queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract(" + " assignment.id, assignment.contract.assignmentStatus," + " assignment.con

首先要澄清的是,我对数据库的使用非常糟糕,所以请不要用我的代码:p

我对使用联接和限制的hibernate查询有问题。我有一个巨大的
作业列表
,其中一些有一个
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"
);
我一步一步地创建这个查询。在此之前,我创建它时没有join子句
left join assignment.asr
,它工作得很好,但它当然没有显示没有
asr
对象的
Assignments
。在我添加了join子句之后,现在它显示了每一个
赋值
(当拥有
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))"
);

你是对的!我试着删除
不是'X'
子句,只留下最后一个,当然,删除
关键字,它就工作了。谢谢