JPA和谷歌应用引擎中的多对多关系
我有实体A和B,A可以有B的集合.B的相同实例可以属于几个A.所以这里有经典的多对多关系。
在GAE中,没有多对多关系的直接支持,相反,它们提供了使用密钥集来进行相关关系的能力。 所以在AI中将维护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的数量,查询本身可能会很长。
有没有更好的方法?
如果您重构关系映射,则可以获得更好的查询。 不是在A中存储一组键,而是在B中存储一组键。然后您可以查询
select * from B where a_id = {idOfRelevantA} and property0 = {criterion0} and property1 = {criterion1}...
这样可以避免in
运算符创建的多个查询。
另外,请注意: in
仅适用于30个元素或更少元素的列表。
- 可以将Google模块与Google Plugin for Eclipse一起使用吗?
- Google App Engine – org.datanucleus.exceptions.NucleusUserException:对象管理器已关闭
- 如何从非GWT(但Java)gapplication调用服务器上的GWT RPC方法?
- 使用JarJar重新包装工具
- 如何配置Google AppEngine以使用矢量图形?
- 如何将Google App Engine的Java Content-Type设置为UTF-8
- 如何在不同的浏览器页面中管理多个帐户登录和注销?
- NoSuchMethodError:将Firebase与应用引擎应用集成
- 为什么更多请求转到新(动态)实例而不是驻留实例?