如何使用多态关联
我什么时候能得到父母的ID的许多一对多的关系表site_sections
有以下栏目:如何使用多态关联
id site_id
section_id
这是用来sections
和sites
表之间的连接表。所以一个网站有很多部分和一个部分可在许多网站。 Sites
表具有以下列:
id store_number
的sites_sections
表是与parameters
表多态性相关联地使用。
我想找到它的store_number
对应网站的栏目特定网站的所有参数。是否有可能在site_settings.id数组通过使用IN
子句SQL中,这样的事情:
Parameter.where("parent_id IN (" + [1, 2, 3, 4] + ") and parent_type ='com.models.SiteSection'");
其中[1, 2, 3, 4]
应该是一组ID从sites_sections表或有更好的解决方案吗?
回答:
你的解决方案是正确的:
Site aSite = Site.findFirst("store_number=?", STORE_NUMBER); List<SiteSection> siteSections= SiteSection.where("site_id=?", aSite.getId()).include(Parameter.class);
for (SiteSection siteSection : siteSections) {
List<Parameter> siteParams = siteSection.getAll(Parameter.class);
for (Parameter siteParam : siteParams) { ... }
}
此外,通过使用include()
,你也避免了N + 1问题:http://javalite.io/lazy_and_eager#improve-efficiency-with-eager-loading
但是可以有一个陷阱。如果您有大量的参数,那么您将使用大量内存,因为include()
会立即将所有结果加载到堆中。如果结果集相对较小,则通过运行单个查询节省资源。如果结果集很大,则会浪费堆空间。
见文档:LazyList#include()
边注:使用aSite.getId()
或aSite.getLongId()
代替aSite.get("id")
以上是 如何使用多态关联 的全部内容, 来源链接: utcz.com/qa/262483.html