【问题标题】:Select query on join table - GORM在连接表上选择查询 - GORM
【发布时间】:2015-01-22 18:04:13
【问题描述】:

我有两个表 Agency 和 Catalog 具有多对多关系和连接表,如下所示。

class Agency{
   static hasMany = [catalogs: Catalog]
   static mapping={
    catalogs: joinTable:[name 'agcat']
   }
}

class Catalog{
   String catalog_name    
   static hasMany = [agencies: Agency]
   static belongsTo = Agency

   static mapping={
    agencies: joinTable:[name 'agcat']
   }
}

我想获取给定 Agency.id = 3 的目录列表(在我的情况下,目录 1 和 2)我已经尝试使用下面的动态查找器进行此操作,但它给了我一行。

 Agency agency = Agency.findById(id)
 def catalog = agency ? Catalog.findAllById(agency.id): []

我的连接表 agat 看起来像这样-

agency_id|catalog_id
2              3
3              1
3              2
4              4

有什么帮助吗?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    就在那里,无需查询:

    Agency agency = Agency.get(id)
    def catalogs = agency?.catalogs ?: []
    

    请注意,我使用的是get,而不是findById。它们基本上是相同的 SQL 查询,但 findById 是一个动态查找器,默认情况下不使用缓存,如果使用它(即它被清除很多),则非常悲观地使用它,而 get 调用总是被缓存(至少在一级缓存中)。

    【讨论】:

    • 请注意,如果 Catalog.findAllById(agency.id) 是一个有效的查询,您会想要执行 Catalog.findAllByAgency(agency) - 考虑对象,而不是 id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多