2010-02-04 76 views
0

如何調用連接在grails.Here是我的域類:左加入Grails中

package com.org.domain 

class CoverageList { 
    Integer id 
    Integer pub_cat_id 
    Integer brand_id 
    Integer brand_set_no 
    String cov_list_desc 
    Date edit_date 
    Date part_edit_date 
    Integer category_id 


    static constraints = { 
    } 

    static mapping = { 
     table 'coverage_list' 
     version false 
     id column : 'COV_LIST_ID' 
     pub_cat_id column : 'PUB_CATEGORY_ID' 
     brand_id column : 'BRAND_ID' 
     brand_set_no column : 'BRAND_SET_NO' 
     cov_list_desc column : 'COV_LIST_DESC' 
     edit_date column : 'EDIT_DATE' 
     part_edit_date column : 'PART_EDIT_DATE' 
     category_id column : 'CATEGORY_ID' 
    } 
} 

package com.org.domain 

class AssocCovList { 
    Integer id 
    Integer association_id 
    Integer cov_list_id 
    String assoc_line_code 
    Date edit_date 
    Date add_date 

    static constraints = { 
    } 

    static mapping = { 
     table 'assoc_cov_list' 
     version false 
     id column : 'ASSOC_COV_LIST_ID' 
     association_id column : 'ASSOCIATION_ID' 
     cov_list_id column : 'COV_LIST_ID' 
     assoc_line_code column : 'ASSOC_LINE_COD' 
     edit_date column : 'EDIT_DATE' 
     add_date column : 'ADD_DATE' 
    } 
} 

class Brand { 
    Integer id 
    String brand_name 
    String aaia_brand_id 
    String brand_owner_name 
    String parent_company_name 
    String site_link_code 
    Date edit_date 

    static hasMany = [cov_lists : CoverageList] 

    static constraints = { 
    } 

    static mapping = { 
     table 'brand' 
     version false 
     id column : 'BRAND_ID' 
     brand_name column : 'BRAND_NAM' 
     aaia_brand_id column : 'AAIA_BRAND_ID' 
     brand_owner_name column : 'BRAND_OWNER_NAME' 
     parent_company_name column : 'PARENT_COMPANY_NAME' 
     site_link_code column : 'SITE_LINK_COD' 
     edit_date column : 'EDIT_DATE' 
    } 
} 

def cov_list = CoverageList.executeQuery 
    ("SELECT c.id, c.cov_list_desc, b.brand_name, a.id, a.association_id, a.cov_list_id FROM CoverageList c LEFT JOIN AssocCovList a ON (c.id = a.cov_list_id AND a.association_id = 1) JOIN Brand b ON b.id= c.brand_id ORDER BY b.brand_name, c.cov_list_desc") 

,但我發現像這樣的錯誤:

{ERROR} portal-web.docroot.html.portal.render_portlet.jsp org.hibernate.hql.ast.QuerySyntaxException: 
    unexpected token: ON near line 1, column 187 [SELECT c.id, c.cov_list_desc, b.brand_name, a.id, a.association_id, a.cov_list_id, a.assoc_line_code, a.edit_date, a.add_date FROM com.org.domain.CoverageList c LEFT JOIN AssocCovList a ON (c.id = a.cov_list_id AND a.association_id = 1) JOIN Brand b ON b.id= c.brand_id ORDER BY b.brand_name, c.cov_list_desc] 

我錯了,請任何人幫助我。

謝謝

回答

0

您不能對2列使用LEFT JOIN。 重寫查詢,如下所示: ... CoverageListÇLEFT JOIN AssocCovList一個ON(c.id = a.cov_list_id)WHERE a.association_id = 1

+0

感謝uthark,我會試一試 – srinath 2010-02-10 15:05:08

0

應該不是你的最後一個加入是一個WHERE呢? 我會將「Brand b」添加到FROM子句中,並將最新的JOIN替換爲「WHERE b.id = c.brand_id」。

我沒有,雖然測試......這只是一個想法...

+0

查詢顯示結果,但與查詢瀏覽器計數相比,總記錄數不匹配。 謝謝。 – srinath 2010-02-10 15:07:31

0

你的代碼看起來像Oracle SQL,但是Grails使用Hibernate作爲ORM。 Hibernate使用Hibernate查詢語言(HQL),它似乎不支持連接和ON子句的連接。 HQL: The Hibernate Query Language

+0

您好,感謝您的解決方案。我使用MySQL作爲後端。 – srinath 2010-02-10 17:59:15