Java JPQL,连接表,多对多关系

时间:2015-11-17 13:06:59

标签: java mysql sql jpa jpql

我们正在学校开展一个项目,并尝试使用实体JPA。 我们的Mysql数据库中有几个表,我们使用的是分类,术语,活动和term_campaign_relationship。

我们为广告系列,期限和分类制定了一个实体。我们希望获得与广告系列相关的所有条款,并按分类标识进行过滤。

我们已经将@ManyToMany JPQL与@JoinTable和joinColumns一起使用 有了这个,我们收到了与该活动相关的所有条款。

但是我们如何仅通过分类标识获得结果?

下面的sql语句显示了我们正在寻找的结果......

SELECT 
t.id, t.term_name, t.taxonomy_id
FROM
term t
    INNER JOIN
taxonomy ty ON ty.id = t.taxonomy_id
    INNER JOIN
campaign c ON c.id IN (SELECT 
        tc.campaign_id
    FROM term_campaign_relationship tc
    WHERE tc.term_id = t.id
)
WHERE c.id = 1 AND ty.id = 1;

这来自我们在java中的广告系列实体

@ManyToMany()
@JoinTable(
  name="term_campaign_relationship",
  joinColumns={@JoinColumn(name="campaign_id", referencedColumnName="id")},
  inverseJoinColumns={@JoinColumn(name="term_id", referencedColumnName="id")})
private Collection<Term> programTypes;

请告知我们是否遗漏了任何东西......

1 个答案:

答案 0 :(得分:0)

这是您寻找的解决方案吗?

Query query = entityManager.createQuery("Select tax from taxonomy tax where tax.id = :arg1"); 
query.setParameter("arg1", 1);