2010-02-04 4 views
0

Comment appeler des jointures dans grails.Here sont mes classes de domaine:gauche se joint à 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") 

Mais je me erreur comme ceci:

{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] 

Est-ce que je me trompe, s'il vous plaît quelqu'un m'aider.

merci

Répondre

0

Vous ne pouvez pas utiliser LEFT JOIN avec 2 colonnes. Ressaisissez votre requête comme suit: ... CoverageList c LEFT JOIN AssocCovList un ON (c.id = a.cov_list_id) OÙ a.association_id = 1

+0

merci uthark, je vais donner un essai – srinath

0
Si

pas votre dernière REJOIGNEZ-être au lieu OÙ? Je voudrais ajouter "Marque b" à la clause FROM et remplacer le dernier JOIN par "WHERE b.id = c.brand_id".

Je n'ai pas testé mais ... il est juste une idée ...

+0

requête montre des résultats, mais il y avait une discordance avec le nombre total d'enregistrements par rapport au compte sur le navigateur de requête. merci. – srinath

0

Votre code ressemble à Oracle SQL, mais Grails utilise Hibernate pour ORM. Hibernate utilise le langage HQL (Hibernate Query Language) qui ne semble pas prendre en charge les jointures suivies de et de la clause ON. HQL: The Hibernate Query Language

+0

Salut rvs, merci pour votre solution. J'utilise MySQL comme Backend. – srinath