JPQL加入了许多关系

时间:2013-06-20 14:07:52

标签: java-ee jpa jpa-2.0 jpql

我在客户端和用户之间存在多对多的关系,我正在尝试运行查询以返回所有活动用户及其客户端,其中客户端也应仅处于活动状态。然而,它也返回所有非活动客户端。我的查询看起来像这样

select u from User u inner join u.clientUsers cu join cu.client c where u.active = true and c.active = true

我确定我的联接类型不正确。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

它将返回所有处于活动状态且具有活动客户端的用户。它不会返回客户端,因此当您访问user.clientUsers关系时,您将获得所有关联的客户端。返回的实体旨在反映实体在数据库中的状态,因此规范中不支持根据您的查询构建不完整的实体。在跟踪更改时会导致问题,在需要实际数据时会产生混淆。尝试将查询基于活动用户的活动客户端,然后从客户端访问用户(假设关系是双向的): “从客户端c中选择c,加入c.clientUsers cu,其中c.active = true,cu.user.active = true” 或者如果你想在一个查询中同时使用:  “select c,u from Client c join c.clientUsers cu join cu.user u where c.active = true and u.active = true”

第二个查询将返回一个object []列表,每个对象数组包含一个客户端及其关联的活动User。如果需要,您可以处理它以映射用户和客户端集合。