Relacionamento oneToMany sendo ignorado
02/06/2012 16:20
0
Tenho as seguintes classes de domínio:
class Pesquisa {

String guid
Tenant tenant
String titulo
Relatorio relatorio
String mapeamentos

static constraints = {
}

static hasMany = [
questoes: Questao,
questionarios: Questionario
]

static mapping = {
questoes lazy: false
questoes sort: 'pos', order: 'asc'
mapeamentos type: 'materialized_clob'
}

def novaQuestao(config) {
def questao = new Questao()
questao.pesquisa = this
if (!questoes)
questoes = []
questao.pos = questoes.size()

questoes.add(questao)
config(questao)
return questao
}
}


class Questao {

static constraints = {
}

static hasMany = [
opcoes: Opcao
]

static belongsTo = [
pesquisa: Pesquisa
]

static mapping = {
opcoes sort: 'pos', order: 'asc'
opcoes lazy: false
}

int pos
String tituloRelatorios
String questao
String tituloFormulario
TipoQuestao tipo

def void setOpcoes(list) {
def pos = 0
def questao = this
opcoes = []

list.each { textoOpcao ->
def opcao = new Opcao()
opcao.pos = pos++
opcao.questao = questao
opcao.opcao = textoOpcao
opcoes << opcao
}
}
}


class Opcao {

static constraints = {
}

static belongsTo = [
questao: Questao
]

int pos
String opcao
}


E no meu bootstrap, faço algo como:
def pesquisa = new Pesquisa(...)		
def sexo = pesquisa.novaQuestao {
it.questao = 'Sexo'
....
it.setOpcoes(['Masculino', 'Feminino'])
}
pesquisa.save(failOnError: true)


Basicamente estou tentando salvar um objeto Pesquisa, que possui um objeto Questao, que por sua vez possui dois elementos no relacionamento chamado "opcoes"

Quase tudo é gravado normalmente, mas este relacionamento opcoes não é gravado. Mesmo se eu gravar as opcoes manualmente, elas não são recuperadas quando eu carrego o objeto Questao do banco de dados. Ao que parece, o GORM/Hibernate está ignorando este relacionamento.
Tags: gorm one-to-many


0
Se for MySQL, muito provavelmente é por causa do dialeto adotado pelo Hibernate.

Da uma olhada neste link.


0
Acho que não é o caso... Testei tanto com Firebird quanto com o H2 e vejo o mesmo comportamento


0
Matei a charada.
O problema era aquele método setOpcoes que eu criei. Tudo passou a funcionar quando eu simplesmente o renomeei :)

Imagino que o Grails ou mesmo o Groovy deve considerar implicitamente um método setOpcoes por causa daquela associação que é chamada opcoes, e como este era o mesmo nome de um método que eu mesmo criei na classe, deve haver algum tipo de conflito.



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto