检查对象是否在ManyToMany集合中而不进行提取并遍历所有集合

时间:2016-08-03 14:48:35

标签: hibernate jpa

我有三个实体:

User (id, name, organizations[], ...)

Organization (id, name, plants[], ...)

Plant (id, name ...)

User.organizations和Organization.plants是ManyToMany FetchType.LAZY关联

现在,我有一个"植物"和一个"用户"宾语。我想知道工厂对象是否在与用户关联的一个(或多个)组织的工厂集合中。

是否可以使用JPA API或至少Hibernate来实现这一点而无需获取所有集合,并且没有自定义查询?

例如,如果一个用户拥有2000个组织,并且每个组织可以包含1000个工厂,那么它可能是一个真正的性能杀手来迭代集合。

1 个答案:

答案 0 :(得分:1)

要获得具有特定工厂组织的所有用户对象,您可以像这样执行JPQL

SELECT u FROM User u JOIN u.organizations o JOIN o.plants p WHERE p.id = :myPlantId

然后查看用户所需的内容。或者,您可以按特定用户约束

SELECT u FROM User u JOIN u.organizations o JOIN o.plants p WHERE u.id = :myUserId AND p.id :myPlantId 
相关问题