2015-05-29 58 views
1

我有以下區域結構: -Grails的SQL轉換成Grails的條件查詢

class A{ 
    B b 
    C c 
    String email 
} 

class B{} 

class C { 
    D d 
} 

class D{} 

下面是我的,我需要轉換成Grails的條件查詢的SQL查詢。

select * from A aa 
    inner join C ca on ca.c_id = aa.id and aa.email = 'source' 
    inner join D da on da.id = ca.d_id 
    inner join B ba on aa.b_id = ba.id 
    inner join A aa1 on b.id = aa1.b_id and aa1.email = 'response' 
+0

'在a.b_id = b.id'上的內連接B ba ... a'和'b'代表什麼? – injecteer

+0

@injecteer對不起,它輸入錯誤。它是aa.b_id = ba.id –

+0

這裏還有'aa1上b.id = aa1.b_id和aa1.email ='response''? – injecteer

回答

0

爲了實現你想要使用Hibernate查詢/格姆您必須擴展您的域名班位:

class A{ 
    B b 
    C c 
    String email 
    A a // self-ref 
} 

然後將查詢應該是這樣的:

A.withCriteria{ 
    eq 'email', 'source' 
    a{ 
    eq 'email', 'response' 
    } 
} 
+0

,這是不可能的,沒有添加一個A//自我參考。 –

+0

不,標準不允許通過「域」類字段以外的「加入」。如果你還需要做一些連接,你必須堅持使用SQL/HQL查詢 – injecteer

+0

@injecteer,我們可以使用detachedcriteria作爲子查詢來進行連接。但我卡在點.. –

0

我已將表格重新命名爲:

class Apple{ 
    Ball ball 
    Cat cat 
    String email 
} 

class Ball{} 

class Cat { 
    Dog dog 
} 

class Dog{} 

而創建的標準是:

return Apple.createCriteria.list() { 

    and { 
     and { 
      eq("email", "source") 
      cat 
     } 
     and { 
      cat { 
       dog 
      } 
     } 
     and { 
      eq("email", "response") 
      ball 
     } 
    } 
} 

如果你有一個真實的數據,讓我知道如果你需要任何幫助。

你也可以看看this example

+0

您提供的鏈接不工作... – Wasim

+0

@Wasim鏈接被編輯。 –

+0

@ Biniam如果我添加以下它使結果列表大小爲0.和{ eq(「email」,「response」) Ball {} } –