我有实体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的数量,查询本身可能会很长。
还有更好的方法吗?
答案 0 :(得分:1)
如果您重构关系映射,则可以获得更好的查询。不是在A中存储一组键,而是在B中存储一组键。然后您可以使用
进行查询select * from B where a_id = {idOfRelevantA} and property0 = {criterion0} and property1 = {criterion1}...
这样可以避免in
运算符创建的多个查询。
另外,请注意:in
仅适用于30个或更少元素的列表。