我使用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
时我必须做些什么吗?
答案 0 :(得分:1)
我对hbase一无所知,但contact
类的静态User
属性看起来非常可疑。此属性是静态的这一事实意味着每个用户都有相同的联系人列表,这似乎不太可能是所期望的行为。
在标准GORM域模型中 - 假设您希望每个User
都有自己的联系人列表 - 这将被定义
class User {
String firstname
String lastname
static hasMany = [contact: Contacts]
}
虽然看起来我们也在这里定义一个静态属性,但实际上只是定义了Contact
和User
类如何相关(AKA映射)是静态的。动态添加到contact
类的User
属性是非静态的。
我建议将Contacts
课程重命名为Contact
,将contact
课程重命名为contacts
。然后GORM映射看起来像这样:
class User {
String firstname
String lastname
static hasMany = [contacts: Contact]
}