grails - 如何在db中保存ArrayList

时间:2011-06-16 11:03:48

标签: grails groovy dns has-many hbase

我使用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 个答案:

答案 0 :(得分:1)

我对hbase一无所知,但contact类的静态User属性看起来非常可疑。此属性是静态的这一事实意味着每个用户都有相同的联系人列表,这似乎不太可能是所期望的行为。

在标准GORM域模型中 - 假设您希望每个User都有自己的联系人列表 - 这将被定义

class User {    
    String firstname
    String lastname

    static hasMany = [contact: Contacts]
}

虽然看起来我们也在这里定义一个静态属性,但实际上只是定义了ContactUser类如何相关(AKA映射)是静态的。动态添加到contact类的User属性是非静态的。

除了

我建议将Contacts课程重命名为Contact,将contact课程重命名为contacts。然后GORM映射看起来像这样:

class User {    
    String firstname
    String lastname

    static hasMany = [contacts: Contact]
}