1

我在客户和用户之间有多对多的关系,并且正在尝试运行查询以返回所有活跃用户及其客户,其中客户也应该是活跃的。但是,它也会返回我所有不活动的客户。我的查询看起来像这样

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

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

4

1 回答 1

2

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

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

于 2013-06-20T14:18:15.820 回答