1、在hibernate中,使用这样的HQL查询,默认生成如下的sql:
select t from CrmBillDetail t where t.status>=0 and t.contract.code like '%GAD%';--hql
select * from crm_bill_detail t1 cross join crm_contract t2 where t1.contract_id=t2.id and t1.status>=0 and t2.code like '%GDA%';
即:生成了内连接的sql,如果关联表crm_contract 中有为空的(外键为空) 那么就会查不出来,因为t1.contract_id=t2.id 这样的语句会查不出结果;
2、使用左连接解决上面的问题:
select t from CrmBillDetail t left join t.contract as e where t.status>=0 and e.code like '%GAD%';--hql