JPA和谷歌应用引擎中的多对多关系

时间:2011-11-07 12:21:35

标签: java google-app-engine jpa persistence many-to-many

我有实体A和B,A可以有B的集合.B的相同实例可以属于几个A.所以这里有经典的多对多关系。

在GAE中,没有多对多关系的直接支持,相反,他们提供了使用关键字关键集的能力。因此,在A中,我将维护B中记录的一组键。

现在的问题是 - 如何查询属于类型A的给定对象并匹配某些条件的B类对象?在普通的SQL中我会这样做:

select B.* 
from 
    B inner join A 
        on B.A_ID=A.ID 
where B.property0=criteria1 
      and B.property1=criteria2 ...
      and ...

但因为我不能做JOIN然后我需要做类似

的事情
select B.* 
from B 
where B.A_ID in ( ... ) 
      and B.property0=criteria1 
      and B.property1=criteria2 ...
      and ...

所以由于ID的数量,查询本身可能会很长。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您重构关系映射,则可以获得更好的查询。不是在A中存储一组键,而是在B中存储一组键。然后您可以使用

进行查询
select * from B where a_id = {idOfRelevantA} and property0 = {criterion0} and property1 = {criterion1}...

这样可以避免in运算符创建的多个查询。

另外,请注意:in仅适用于30个或更少元素的列表。