参考:https://blog.csdn.net/zxl8876/article/details/84972047
QDqmIntegrity表中有tab,和tabRel 两个字段,关联的表都是QDqmTab表,此时需要关联QDqmTab表两次,才能同时得到tab、tabRel的翻译值;代码如下:
/**
* 完整性错误详情列表
*
* @param tab
* @param date
* @param orgCode
* @return
*/
public Page<DqmIntegrityDto> getIntegrityDetailList(String tab, String tabRel, String date, String orgCode, Integer pageSize, Integer pageCurrent) {
QDqmIntegrity qDqmIntegrity = QDqmIntegrity.dqmIntegrity;
QDqmTab qDqmTab1 = new QDqmTab("qDqmTab1");
QDqmTab qDqmTab2 = new QDqmTab("qDqmTab2");
QDqmIntRule qDqmIntRule = QDqmIntRule.dqmIntRule;
QSysOrg qSysOrg = QSysOrg.sysOrg;
QBean<DqmIntegrityDto> bean = Projections.bean(DqmIntegrityDto.class, qDqmIntegrity.orgId, qSysOrg.id.orgName, qDqmIntegrity.tab, qDqmTab1.tabName.as("tabName"), qDqmIntegrity.mainKey, qDqmIntegrity.mainKeyValue, qDqmIntegrity.intRuleId, qDqmIntRule.intRule,
qDqmIntRule.intDesc.as("intDesc"), qDqmIntegrity.upDate, qDqmIntegrity.tabRel, qDqmTab2.tabName.as("tabRelName"));
JPAQuery<DqmIntegrityDto> jpaQuery = queryFactory.select(bean).from(qDqmIntegrity).leftJoin(qSysOrg).on(qDqmIntegrity.orgId.eq(qSysOrg.id.orgCode));
jpaQuery.leftJoin(qDqmTab1).on(qDqmIntegrity.tab.eq(qDqmTab1.tab));
jpaQuery.leftJoin(qDqmIntRule).on(qDqmIntegrity.intRuleId.eq(qDqmIntRule.id));
jpaQuery.leftJoin(qDqmTab2).on(qDqmIntegrity.tabRel.eq(qDqmTab2.tab));
jpaQuery.where(qDqmIntegrity.tab.eq(tab).and(qDqmIntegrity.tabRel.eq(tabRel)).and(qDqmIntegrity.upDate.eq(date)));
if (CommonUtils.isNotEmpty(orgCode)) {
jpaQuery.where(qDqmIntegrity.orgId.in(orgCode));
}
Long totalCount = jpaQuery.fetchCount();
List<DqmIntegrityDto> list = jpaQuery.offset(pageCurrent).limit(pageSize).fetch();
Page<DqmIntegrityDto> page = new Page<DqmIntegrityDto>(totalCount.intValue(), pageSize, pageCurrent, list);
return page;
}
关键点:
使用如下方式创建别名之后,关联时才能区分:
QDqmTab qDqmTab1 = new QDqmTab(“qDqmTab1”);
QDqmTab qDqmTab2 = new QDqmTab(“qDqmTab2”);
如果像下边这样只是创建了两个对象,却没使用别名,那么关联时不会区分,只引用其中一个,可通过看后台打印sql查看现象:
QDqmTab qDqmTab1 = QDqmTab.dqmTab;
QDqmTab qDqmTab2 = QDqmTab.dqmTab;