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;