2016-03-29 9 views
0

Ich benutze MySQL db und arbeitet mit Grails. Ich habe 2 Tabellen erstellt und ich habe eine Spalte, die einen Fremdschlüssel zwischen den Tabellen darstellt (ich habe hasMany verwendet). Dies ist, was ich im Allgemeinen:GORM hinzufügen Fremdschlüssel Wert zu bereits vorhanden Objekt

class Address { 

    static belongsTo = Person 
    static mapping = { 
    street defaultValue: "'s'" 
    city defaultValue: "'c'" 
} 
} 

und

class Person { 
    private String firstName 
    private String lastName 

    Set<Address> addresses; 
    static hasMany = [addresses: Address] 

    static mapping = { 
    table 'people' 
    firstName column: 'fn' 
    addresses lazy: false 
    addresses column:'Person_ID',joinTable: false 
    } 
} 

ich bereits einige Adresswerte in der db erstellt, so dass die Fremdschlüssel person_id null ist. Jetzt versuche ich, es zu aktualisieren und Beziehungen zu Person ohne Erfolg zu setzen. Aus irgendeinem Grund kann ich die Beziehungen nicht aktualisieren, sobald das Objekt in der DB gespeichert ist.

Einer der Wege, habe ich versucht, es

Address a1 = new Address(); 
    a1.setCity("Tester1"); 
    a1.setStreet("Tester1"); 

    Person pdb = new Person(firstName: "SupermanB", lastName: "BatmanB"); 
    pdb.save(flush:true); 

    pdb.addToAddresses(a1).save(flush:true); 
    pdb.save(flush:true); 

Hat jemand eine Idee, wie ich Bezug auf ein Objekt festlegen kann, die bereits in der DB gespeichert?

Dank

+0

warum hast du 'addresses' Mapping in 2 Zeilen setzen? – injecteer

Antwort

0

Ich glaube nicht, Sie hasMany ohne joinTable und keine Back-ref haben. ein bisschen

Die einfachste Lösung wäre es, die Adressklasse zu ändern:

class Address { 

    static belongsTo = [ person:Person ] 
    ... 
}