Grails - как сохранить ArrayList в БД - PullRequest
0 голосов
/ 16 июня 2011

Я использую Grails-1.3.2 и плагин hbase.У меня есть некоторые трудности в создании связи один-ко-многим с hbase (я могу работать с hibernate), поэтому я решил попробовать создать связь один-ко-многим с использованием ArrayList.контроллеры:

class Contacts {

    String con   

    static constraints = {}
}

class ContactsController {

    def create = {
        def contact = new Contacts()
        contact.con = params.con
        contact.save(flush:true)
    }
}

class User {

    String firstname
    String lastname

    // static hasMany = [contact: Contacts]

    static ArrayList<Contacts> contact    

    static constraints = {}
}

class UserController{

    def create = {
        def user = new User()

        user.properties = params
        user.save(flush: true)
    }

    def addContact = {
        def user = User.get(params.userID)
        def contact = Contacts.get(params.contactID)

        user.contact.add(contact)
        user.save(flush:true)
    }
}

В addContact действие user.contact = null, поэтому он не может работать.У пользователя нет ни поля contact.

Может ли кто-нибудь помочь мне понять, что я должен сделать для сохранения ArrayList в db?

1 Ответ

1 голос
/ 16 июня 2011

Я ничего не знаю о hbase, но статическое свойство contact класса User выглядит очень подозрительно.Тот факт, что это свойство является статическим, подразумевает, что у каждого пользователя один и тот же список контактов, что вряд ли является желаемым поведением.

В стандартной модели домена GORM - при условии, что вы хотите, чтобы каждый User имел своисобственный список контактов - это будет определено

class User {    
    String firstname
    String lastname

    static hasMany = [contact: Contacts]
}

Хотя похоже, что здесь мы также определяем статическое свойство, на самом деле это просто определение того, как связаны классы Contact и User (AKA mapping), это статично.Свойство contact, которое динамически добавляется к классу User, нестатично.

Помимо

Я рекомендую переименовать класс Contacts в Contact и contactсвойство до contacts.Тогда отображение GORM будет выглядеть так:

class User {    
    String firstname
    String lastname

    static hasMany = [contacts: Contact]
}
...