Update
29/05/2014 13:06
1
Estamos começando no Grails... temos uma tabela Aluno que se relaciona com uma tabela Disciplina atraves da tabela AlunoDisciplina, quando tentamos atualizar a tabela Aluno e existe mais de uma Disciplina dá erro de chave duplicada....No console do netbeans percebemos que está dando insert...ao invés de update....o que fazer?
Tags: Update


1
Oi Norma, alguns pontos para você verificar.

Como está a definição da sua tabela que faz o relacionamento muitos para muitos? Ela deve ter uma restrição do tipo unique que permita apenas um registro com o mesmo aluno e mesma disciplina, certo?

Além disto, tem como você nos mostrar também como estão suas classes de domínio para que possamos entender melhor o problema?


0
package br.meu.cad

class Aluno {

static hasMany = [
disciplinas: Disciplina
]

String nome
String matricula

static constraints = {
nome nullable: false
matricula nullable: false
disciplinas nullable: true
}

static mapping = {
table 'aluno'
matricula column: 'cd_aluno',
nome column: 'nm_aluno',
disciplinas column: 'cd_aluno',
joinTable: 'aluno_disciplina'
}

String toString() {
return nome
}
}

----------------------------------------------

package br.meu.cad

class Disciplina {

static hasMany = [
alunos: Aluno
]

static belongsTo = Aluno

String nome
String codigo

static constraints = {
nome nullable: false
codigo nullable: false
}

static mapping = {
table 'disciplina'
codigo column: 'cd_disciplina',
nome column: 'nm_disciplina',
alunos column: 'cd_disciplina',
joinTable: 'aluno_disciplina'
}

String toString() {
return nome
}
}


0
Quando eu crio um aluno, consigo selecionar uma ou mais disciplinas para ele sem problemas. O problema ocorre quando quero editar o aluno, não importa quantas ou quais disciplinas eu escolho, na hora de salvar ele dá um erro dizendo que a chave foi duplicada.


1
Olá Norma, bem vinda ao Grails :)
Tem como você mandar o código do update da sua controller Aluno?
Suas views e controllers foram geradas pelo scaffolding? qual versão do grails?
30/05/2014 12:37


0
Oi Dyego

Obrigado por responder. Eu estou usando o scaffolding do Grails, ele montou para mim todos os métodos CRUD. Estou utilizando o Grails 2.3.1

Preciso fazer os método de UPDATE manualmente para os casos que tenho relação Muitos para Muitos?


1
Certo, você usou o comando "generate-all" ou "generate-controller" para gerar a controller ou está usando apenas "def sacaffolding" na controller? Se não tiver usado, use este comando para poder ter acesso ao código da controller gerada pelo scaffolding, ai vc conseguirá ver exatamente o que ele está fazendo.
Pelo que eu me lembro dessas versões do grails (2.3.1 ou 2.3.2) elas ainda não tratavam este tipo de relacionamento corretamente.
Se preferir poste o código do update da controller.
30/05/2014 13:40


0
Oi Dyego

Eu fiz um generate-all. Estamos analisando aqui o console e percebemos que quando é feito a alteração ou inclusão de uma única disciplina o método exclui tudo da tabela intermediária e depois insere novamente. No caso de múltiplas disciplinas ele não faz o delete, insere direto na tabela intermediária e possivelmente está fazendo com que os registros fiquem duplicados.

Estou atualizando agora mesmo para a versão 2.4.0 para ver se resolve o problema.

Obrigadinho ^^



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