• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何使用多态关联

activejdbc 来源:belgoros 4次浏览

我什么时候能得到父母的ID的许多一对多的关系表site_sections有以下栏目:如何使用多态关联

id 
site_id 
section_id 

这是用来sectionssites表之间的连接表。所以一个网站有很多部分和一个部分可在许多网站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")


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)