2012-12-06 105 views
4

我有这些类JPA多加入

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财产和一个NullPointerException异常升高DataNucleus将里面的工作。

+0

我也试过 设定R从项目p INNER JOIN p.resources r WHERE EXISTS(SELECT c FROM Company c WHERE c.country =:country AND p.owner = c) 但它抱怨'拥有者'不是人身上的财产。 –

回答

2

这应该做你所期望的:

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 
+0

那个国家呢? –

+0

据我所知,JOIN默认是INNER,所以INNER可以省略。同样如此。然后,实际上解决方案只是我给出的第一部分,并表示它不起作用。 –

+0

您是否尝试过'owner.country'上的简单where子句? 'SELECT resource FROM Project p INNER JOIN p.resources as resource where p.owner.country =:country' – ssssteffff