【问题标题】:JPA multiple joinsJPA 多重连接
【发布时间】:2012-11-24 07:59:57
【问题描述】:

我有这些课程

class Project {
    @ManyToOne Company owner;
    @ManyToMany Set<Person> resources;
}
class Company {
    @ManyToOne Country country;
}
class Person {
}

我如何编写 JPQL 以获取所有资源用于特定国家/地区的公司的项目?

下面的似乎不起作用(使用 DataNucleus)

SELECT r FROM Project p JOIN p.resources r JOIN p.owner c WHERE c.country = :country

它尝试将rc 连接起来,当然没有owner 属性,并且在DataNucleus 中引发了NullPointerException。

【问题讨论】:

  • 我也试过 SELECT r FROM Project p INNER JOIN p.resources r WHERE EXISTS (SELECT c FROM Company c WHERE c.country = :country AND p.owner = c) 但它抱怨说 'owner ' 不是 Person 中的属性。

标签: jpa join jpql


【解决方案1】:

这应该符合您的预期:

SELECT resource FROM Project p INNER JOIN p.resources as resource

编辑:

我忘记了最初的问题的一部分:

SELECT resource FROM Project p INNER JOIN p.resources as resource where p.owner.country = :country

【讨论】:

  • 据我所知,JOIN默认是INNER,所以可以省略INNER。同样适用于。然后实际上解决方案只是我给出的第一部分并说它不起作用。
  • 您是否尝试过 owner.country 上的简单 where 子句? SELECT resource FROM Project p INNER JOIN p.resources as resource where p.owner.country = :country
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2021-06-22
  • 2021-08-23
  • 2018-10-31
相关资源
最近更新 更多