我有以下 Realm 类(class)

class EventA {
   static belongsTo = [offer: Offer]
}
class EventB extends EventA {}
class EventC extends EventA {}

class Offer {
 static hasMany [events: EventA]
}

我需要检索与EventC不相关的报价。

在SQL中,可以很容易地执行以下操作:
SELECT *
  FROM OFFER O
  LEFT JOIN EVENTC C ON O.event_id = C.id
 WHERE C.ID IS NULL

在grails文档中搜索,我发现了instanceOf。说明一旦有了结果集,就可以执行实例类型的检查。
    def offers = Offer.list()
    for (Offer o in offers) {
       for(Event e : o.events) {
          if (e.instanceOf(EventC)) {
              // no bueno
          }
       }
    }

以上只是感觉不对。我更希望数据库为我做这样的过滤。有没有办法用searchCriteria执行这样的过滤器?

最佳答案

您可以通过直接查询Event类来完成此操作。这样,您可以专门查询您关心的Event的风格。然后使用ID的列表查询Offer

Offer.findAllByIdInList(EventC.list().offerId)

关于grails - Grails/Gorm-namedQuery hasMany关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56673375/

10-12 17:35