2012-09-20 13 views
0

時下面是我的領域類需要禁用Grails的延遲加載讀取結果

class Sender { 

String senderFname; 
String senderLname; 
String senderPhone; 

Collection receivers 

static hasMany = [receivers: Receiver] 
} 

class Receiver { 

String receiverFname; 
String receiverLname; 
String receiverPhone; 

    static belongsTo = [sender: Sender] 
} 

我寫邏輯進行簡單的搜索功能。

def customers() { 

    println 'customers params '+params 
    //def senderCriteria = Sender.createCriteria() 
    def senderList = Sender.withCriteria { 

     if(params.senderfname) 
      like('senderFname',params.senderfname) 
     if(params.senderlname) 
      like('senderLname',params.senderlname)   
     if(params.senderphone) 
      like('senderPhone',params.senderphone) 

     createAlias("receivers", "t") 

     //receivers { 
      if(params.receiverfname) 
       like('t.receiverFname',params.receiverfname) 
      if(params.recieverlname) 
       like('t.receiverLname',params.receiverlname) 
      if(params.recieverphone) 
       like('t.receiverPhone',params.receiverphone) 
     //} 


    } 

    println "senderList "+senderList; 

    senderList.each{ it-> println 'sender '+it 
     println 'receivers '+it.receivers 

    } 
    //senderList = senderList.unique() 
    println "senderList "+senderList; 
    render(view: 'customers', model: [senderList: senderList]) 

} 

從發件人到收件人之間存在一對多的關係。我想過濾發件人對象及其相應的接收者對象。

主createCriteria返回發件人對象的預期結果。但是,當我訪問發送者對象以獲取相應的接收者時,它將再次從數據庫加載所有接收者。

有什麼辦法可以解決這個問題。

+0

您希望禁用_Lazy Loading_,而不是預先抓取。 – cdeszaq

+0

@cdeszaq得到了,我很困惑。現在我明白了,我正在編輯我的問題。 –

+0

你可以在這裏閱讀關於GORM-fethcing的內容:http://grails.org/doc/latest/guide/GORM.html#fetching你應該在那裏找到你的答案。我不太明白這個問題。希望能幫助到你。 – marko

回答

1

您可以在createAlias時指定連接類型。

createAlias("receivers", "t", org.hibernate.criterion.CriteriaSpecification.LEFT_JOIN)