多对多查询 jpql

Posted

技术标签:

【中文标题】多对多查询 jpql【英文标题】:Many-to-Many query jpql 【发布时间】:2013-09-06 16:52:06 【问题描述】:

我有以下问题。

有一个实体Distributor与实体城镇的ManyToMany关系相连:

@Entity
public class Distributor

   @ManyToMany
   @JoinTable( name = "GS_DISTRIBUTOR_TOWN",
           joinColumns = @JoinColumn(name = "CD_DISTRIBUTOR"),
           inverseJoinColumns = @JoinColumn(name = "CD_TOWN") )
   private List<Town> towns;

   ....

那么实体镇也和District有关系

@Entity
public class Town

   @ManyToMany(mappedBy="towns")
   private List<Distributor> distributors;

   @ManyToOne
   private District district;

   ....

现在我必须过滤(使用 jpql)在一个地区的所有经销商。 我该怎么办?

【问题讨论】:

【参考方案1】:
select distinct distributor 
from Distributor distributor  
join distributor.towns town 
join town.district district 
where district.name = :name

见:https://en.wikibooks.org/wiki/Java_Persistence/JPQL

【讨论】:

【参考方案2】:

首先,从实体 Town 来看,@Manytoone 的关系映射不正确。 应该是:

@Entity
public class District 

  .....

   @ManyToOne
   private Town town;

   ....

【讨论】:

这应该是一条评论,因为它没有回答所提出的问题。

以上是关于多对多查询 jpql的主要内容,如果未能解决你的问题,请参考以下文章

具有多对多关系的 JPQL 查询

返回涉及多对多关系的实体的 JPQL 查询

JPQL 基于条件的多对多连接

JPQL 多对多 Dto 选择失败

JPA 多对多JPQL查询语句怎么写?

JPQL在多对多关系上左外连接