解决jpa 使用query dsl关联查询时,关联同一张表两次的问题

本文介绍了一种在QDqmIntegrity表中同时获取tab和tabRel字段翻译值的方法,通过两次关联QDqmTab表,并使用别名区分不同实例,确保了查询的准确性。

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;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值