jpaがquery dsl関連クエリを使用している場合、同じ表の2回に関連する問題を解決します.
QDqmIntegrity表にはtabとtabRelの二つのフィールドがあり、関連する表はすべてQDqmTab表であり、この時は関連QDQmTab表を二回必要とし、tab、tabRelの翻訳値を同時に得ることができる.コードは以下の通りです
/**
*
*
* @param tab
* @param date
* @param orgCode
* @return
*/
public Page 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 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 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 list = jpaQuery.offset(pageCurrent).limit(pageSize).fetch();
Page page = new Page(totalCount.intValue(), pageSize, pageCurrent, list);
return page;
}
ポイント:別名を次のように作成してから、関連する時に区別できます.QDqmTab 1=new QDqmTab(「QDQmTab 1」)QDQmTab QDQmTab 2=new QDqmTab(「QDQmTab 2」)下のように二つのオブジェクトを作成しただけで、別名が使用されていない場合は、関連付けは区別されません.一つだけ引用して、バックグラウンドの印刷を見て現象を確認できます.QDQmTab 1=QDqmTab.dqmTab;QDQmTab qmTab 2=QDqmTab.dqmTab;