使用grails、HQL的复杂SQL查询

使用grails、HQL的复杂SQL查询,grails,hql,gorm,Grails,Hql,Gorm,我试图在HQL grails中编写一个3表联接查询。我的3个类是: class Domains { String name Date ets Account account static hasMany = [facebooks: Facebook, twitters: Twitter] } 我正在尝试获取与域eid相关的FBPOST。我当前的HQL查询如下所示: def fbPosts = FbPosts.findAll("from FbPosts as

我试图在HQL grails中编写一个3表联接查询。我的3个类是:

class Domains {
    String name
    Date ets
    Account account

    static hasMany = [facebooks: Facebook, twitters: Twitter]
}

我正在尝试获取与域eid相关的FBPOST。我当前的HQL查询如下所示:

def fbPosts = FbPosts.findAll("from FbPosts as fb join Facebook as f on f.eid=fb.facebook_eid join Domains as d on d.eid=f.domain_eid where d.eid=?"[domain_eid])
def map = [fbPosts:fbPosts]

而且似乎不起作用。请提供帮助。

它是否符合标准

def fbPosts = FbPosts.withCriteria {
    facebook {
        domains {
            eq( 'eid', domain_eid )
        }
    }
}

那么这个怎么样?缺点是,除非持久性缓存中已经存在domains对象,否则它将导致两个单独的数据库查询

def domainsInstance=Domains.get(domain_eid)
def fbPosts = FbPosts.withCriteria {
    facebook {
        eq('domains', domainsInstance)
    }
}

@JJDev还有,eid从何而来?我在域对象中看不到它…是的,它来自域,所有表的主键是eid,相应表的外键是name_eid,例如:facebook_eid,fbposts_eid,domains_eid。不要问为什么lol,因为我没有创建数据库,那么它应该是域类的一部分吗?
def fbPosts = FbPosts.withCriteria {
    facebook {
        domains {
            eq( 'eid', domain_eid )
        }
    }
}
def domainsInstance=Domains.get(domain_eid)
def fbPosts = FbPosts.withCriteria {
    facebook {
        eq('domains', domainsInstance)
    }
}