2014-04-23 70 views
0

我试图写在HQL 3表连接查询的Grails我3类:复杂的SQL查询使用Grails,HQL

class Domains { 
    String name 
    Date ets 
    Account account 

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

...

class Facebook { 
    Boolean activated 
    String name 
    String token 
    String pageId 
    String expiryTime 
    String scope 
    Date ets 
    String username 
    Domains domains 

    static belongsTo = [Domains] 
} 

...

class FbPosts { 
    String postId 
    Long commentsCount 
    Long likesCount 
    Long sharesCount 
    Date date 
    Date ets 
    String message 
    String type 
    Integer postImpression 
    Facebook facebook 

    static belongsTo = [Facebook] 
} 

我正在尝试获取与域(域eid)相关的fbPosts。我目前的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] 

并且似乎不工作。请帮忙。

回答

0

这样呢?缺点是它会导致两个单独的数据库查询(除非域对象已存在于持久缓存中)。

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

它是否符合标准?

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

没有它似乎没有工作.. – JJDev

+0

什么是不工作?任何错误信息? –

+0

@JJDev另外,来自'Domain'的'eid'在哪里?我无法在域对象中看到它... –