Salvando domains realcionadas hasOne - como fazer no controller na função save?
02/08/2012 00:15
0
Olá amigos eu tenho uma pagina index onde tenho todos os meus campos setados, mas eu tenho 3 classes de dominio uma principal e duas comuns. Classe de dominio Banco, BancoBoleto e Banco Cheque. Vamos lá: gostaria de saber como salvar todos os dados nas tres tabelas uma pai dois filhos de uma vez. Abaixo é o que tenho:
Classe Pai Banco

class Banco {

long id
Empresa empresa
String numero
String agencia
String nome
static hasOne = [boleto: BancoBoleto, cheque: BancoCheque]

static mapping = {
version false
numero lenght: 10
agencia lenght: 20
nome lenght: 50
}

static constraints = {
}
}


Classe Filho BancoBoleto


class BancoBoleto {

Banco banco
String contaCobranca
String contaContabil
String descricaoContabil
static belongsTo = [banco:Banco]
static mapping ={
version false
}
}

Classe Filho BancoCheque


class BancoCheque {

Banco banco
boolean canhoto
int alturaCheque
int distanciaValor
int distanciaMes
static belongsTo = [banco:Banco]
static mapping ={
version false
}
}


Meu controller:


def salvar() {
def result = ['status': 1, 'mensagem': '']

if (!params.nome) {
result.status = 2
result.mensagem = 'Informe o Nome do Banco'
}
else if (!params.numero){
result.status = 2
result.mensagem = 'Informe o número do banco'
}
else if (!params.agencia){
result.status = 2
result.mensagem = 'informe o número da agência'
} else {

def banco = Banco.get()

if (!banco) {
banco = new Banco(params)
banco.boleto = new BancoBoleto()
banco.cheque = new BancoCheque()
banco.properties = params
def empresa = Sessao.empresaAtivo()

banco.empresa = empresa
banco.save()

result.mensagem = 'Cadastro adicionado'
} else {
banco.properties = params
banco.merge()
result.mensagem = 'Cadastro atualizado'
}
}
render result as JSON
}



O problema é que já gastei trocentos neuronios e esse código não está salvando nada no banco de dados, eu apreciaria muito dicas e ajuda Obrigado.
Tags: hasOne, belongsTo, função salvar, domain, controller


0
Fala Brother!

Seguinte Silas,

O uso de no dominio Banco:

long id


É desnecessário pois o grails cuida disso pra vc

No seu controller:

O Banco tem um BancoBoleto e BancoCheque, quando vc for salvar o Banco vc vai precisar desses dois objetos, se ñ existir vc vai ter que criar(Se na sua modelagem o BancoBoleto ou BancoCheque não pode ser nulo), se existir ele é apresentado na sua view! esses objetos provavelmente serão enviados como parametro contendo um id, com ele vc pode pesquisar ou pegar os objetos

Em:
def banco = Banco.get()


O get tem que receber um id, pelo que entendi vc quis verificar se existe algum registro, então no caso creio que o list() seria mais conveniente! mas tem outras formas de se verificar isso!


0
Opa gabriel bom dia, obrigado pela sua resposta, eu consegui evoluir nesse quisito, minha controller ta salvando duas tabelas a banco e a bancocheque mas a bancoboleto não ta recebendo os dados do campos. ja criei um datagrid mas só soube puxar os dados do banco rssss, to engatinhando ainda no grails. vou passar a controller novamente com o que mudei:



def salvar() {
def result = ['status': 1, 'mensagem': '']

if (!params.nome) {
result.status = 2
result.mensagem = 'Informe o Nome do Banco'
}
else if (!params.numero){
result.status = 2
result.mensagem = 'Informe o número do banco'
}
else if (!params.agencia){
result.status = 2
result.mensagem = 'informe o número da agência'
}
else if (!params.endereco){
result.status = 2
result.mensagem = 'Informe o número do endereço'
}
else if (!params.conta){
result.status = 2
result.mensagem = 'Informe o número do conta'
}
else if (!params.uso){
result.status = 2
result.mensagem = 'Informe o número do uso'
}
else if (!params.gerente){
result.status = 2
result.mensagem = 'Informe o número do gerente'
}
else if (!params.convenioBoleto){
result.status = 2
result.mensagem = 'Informe o número do convenio'
} else {

def banco = Banco.get(params.id)


if (!banco) {
banco = new Banco(params)
banco.boleto = new BancoBoleto()
banco.cheque = new BancoCheque()
//banco.properties = params
def empresa = Sessao.empresaAtivo()
banco.empresa = empresa
banco.save()
result.mensagem = 'Cadastro adicionado'

} else {
banco.properties = params
banco.merge()
result.mensagem = 'Cadastro atualizado'
}
if (!banco.save()) {
banco.errors.each {
println it
}
}
}
render result as JSON
}



Eu nao gostaria de somente copiar e colar caso consigamos achar uma solução gostaria que se pudessem explicar onde há o erro para que possamos aprender . obrigado desde já
02/08/2012 12:33


0
Agora esta retornando este erro:

grails.validation.ValidationErrors: 1 errors
Field error in object 'core.Banco' on field 'boleto': rejected value [null]; codes [core.Banco.boleto.nullable.error.core.Banco.boleto,core.Banco.boleto.nullable.error.boleto,core.Banco.boleto.nullable.error.core.BancoBoleto,core.Banco.boleto.nullable.error,banco.boleto.nullable.error.core.Banco.boleto,banco.boleto.nullable.error.boleto,banco.boleto.nullable.error.core.BancoBoleto,banco.boleto.nullable.error,core.Banco.boleto.nullable.core.Banco.boleto,core.Banco.boleto.nullable.boleto,core.Banco.boleto.nullable.core.BancoBoleto,core.Banco.boleto.nullable,banco.boleto.nullable.core.Banco.boleto,banco.boleto.nullable.boleto,banco.boleto.nullable.core.BancoBoleto,banco.boleto.nullable,nullable.core.Banco.boleto,nullable.boleto,nullable.core.BancoBoleto,nullable]; arguments [boleto,class core.Banco]; default message [O campo [{0}] da classe [{1}] não pode ser vazia]
Preciso de um help antes que meu cerebro exploda rssss...
02/08/2012 14:55



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