Grails - как сохранить ArrayList в db

80
15

Я использую grails- 1.3.2 и hbase плагин.
Мне сложно создавать one- to-. Многие ассоциации с
hbase (я могу работать с спящим режимом), поэтому
я решил попробовать создать one- to- Многие ассоциации с использованием 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 action user.contact = null, поэтому он не может работать.
В пользователе не отображается поле contact.


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

спросил(а) 2021-01-19T15:12:10+03:00 6 месяцев, 2 недели назад
1
Решение
65

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


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


class User {    
String firstname
String lastname

static hasMany = [contact: Contacts]
}


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

Помимо


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


class User {    
String firstname
String lastname

static hasMany = [contacts: Contact]
}

ответил(а) 2021-01-19T15:12:10+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема