Sql &引用;其中;不使用join子句处理hql查询的限制
首先要澄清的是,我对数据库的使用非常糟糕,所以请不要用我的代码:p 我对使用联接和限制的hibernate查询有问题。我有一个巨大的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
作业列表
,其中一些有一个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'
子句,只留下最后一个,当然,删除或关键字,它就工作了。谢谢