【问题标题】:Many-to-Many query jpql多对多查询 jpql
【发布时间】:2023-11-22 21:36:01
【问题描述】:

我有以下问题。

有一个实体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)在一个地区的所有经销商。 我该怎么办?

【问题讨论】:

    标签: java jpa jpa-2.0 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;
      
         ....
      }
      

      【讨论】:

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