2010-05-19 6 views
0

J'ai deux domaines:Génération GORM ID et association belongsTo?

class CodeSetDetail { 

    String id 
    String codeSummaryId 

    static hasMany = [codes:CodeSummary] 

    static constraints = { 
     id(unique:true,blank:false) 
    } 

    static mapping = { 
     version false 
     id column:'code_set_detail_id', generator: 'assigned' 
    } 
} 

and : 

class CodeSummary { 

    String id 
    String codeClass 
    String name 
    String accession 

    static belongsTo = [codeSetDetail:CodeSetDetail] 

    static constraints = { 
     id(unique:true,blank:false) 
    } 

    static mapping = { 
     version false 
     id column:'code_summary_id', generator: 'assigned' 
    } 
} 

Je reçois deux tables avec des colonnes:

code_set_detail:

code_set_detail_id  
code_summary_id 

et

code_summary:

code_summary_id 
code_set_detail_id (should not exist)  
code_class  
name 
accession 

Je voudrais créer un lien code_set_detail table et la table code_summary par 'code_summary_id' (et non par 'code_set_detail_id').
Remarque: 'code_summary_id' est défini en tant que colonne dans la table code_set_detail et défini en tant que clé primaire dans la table code_summary. En résumé, je voudrais définir 'code_summary_id' comme clé primaire dans la table code_summary, et mapper 'code_summary_id' dans la table code_set_detail.

Comment définir une clé primaire dans une table et mapper cette clé sur une autre table?

Répondre

1

De votre code Groovy, chaque CodeSetDetail a beaucoup d'objets CodeSummary qui lui sont associés. La façon de procéder dans la base de données consiste à faire en sorte que chaque ligne du tableau code_summary identifie une ligne associée à la table code_set_detail. Vous avez dit:

Pour résumer, je voudrais définissent « code_summary_id » comme clé primaire dans tableau code_summary et la carte « code_summary_id » dans code_set_detail tableau .

Si vous avez une table code_summary_id dans code_set_detail, chaque ligne de code_set_detail peut être associée au plus à une ligne dans le tableau code_summary, ce qui signifie que chaque objet Groovy CodeSetDetail peut pointer vers au plus un objet CodeSummary. Est-ce que c'est ce que tu veux?

+0

Je voudrais lier: CodeSetDetail (codeSummaryId = TEM123) avec CodeSummary (codeSummaryId = TEM123). –

+0

Dans ce cas, 'CodeSetDetail' ne peut faire référence qu'à un seul' CodeSummary'. Si c'est ce que vous voulez, supprimez les lignes 'String codeSummaryId' et' static hasMany = [codes: CodeSummary] 'de' CodeSetDetail' et ayez juste un champ 'CodeSummary codeSummary' à la place. Reportez-vous également à la section One-to-One à http://www.grails.org/GORM+-+Defining+relationships –

+0

Je peux ajouter l'utilisation static belongsTo = [codeSetDetail: CodeSetDetail], si je veux supprimer en cascade. Merci. –