java.lang.StackOverflowError
24/09/2013 16:58
0
Pessoal devo estar fazendo algum relacionamento errado...
Vamos la minha dúvida está relacionada com 2 modelos Entregas.groovy e Pedidos.groovy
O que acontece é que no momento que vou salvar uma entrega com N Pedidos acontece o stackOverFlow.
Infelizmente não estou conseguindo configurar o ambiente direito para debugar. apenas com printlns... :(
PS. Salvando uma Entrega sem pedidos tudo funciona perfeitamente.
afim de descobrir o erro

Entregas.groovy

package br.com.aplicacao.sanduiche

import java.util.Date;
import java.util.Formatter.DateTime;

class Entregas {

static hasMany = [pedidos:Pedidos]

Enderecos endereco
Funcionario funcionario
Cliente cliente
EstadoEntregaEnum situacaoEntrega
Date dtEntrega
Date dtSolicitacao
double total = 0


static transients = ["total "] //***

static constraints = {
funcionario nullable:false
endereco nullable:true
dtEntrega nullable:true
dtSolicitacao nullable:true
cliente nullable:true
situacaoEntrega nullable:false
}

double getTotal() {
if(pedidos != null){
println pedidos.size();
if(pedidos?.size() >0){
pedidos.each{ it->
println it.total
println "########34##"
println total

total = total + it.total
}
}

}
return total;
}
}


Pedidos.groovy

package br.com.aplicacao.sanduiche

import br.com.aplicacao.sanduiche.Produtos

class Pedidos {

Produtos produto
int quantidade = 0
String observacao
double total = 0


static transients = ["total "] //***

static constraints = {
quantidade min:1
produto nullable:false, blank:false
}

double getTotal() {
if(produto==null){
produto = new Produtos(preco:0);
}

return produto.getPreco() * quantidade
}
}
Tags: StackOverflowError


0
24/09/2013 17:08


0
https://drive.google.com/?tab=mo&authuser=0#folders/0B_gWVCSRybc9VXVyLXp5eERKQlU

24/09/2013 17:09


0
https://docs.google.com/file/d/0B_gWVCSRybc9Z3Ezd05HMHFGQ0E/edit?usp=sharing
24/09/2013 17:38


0
Erro atual...
Groovy.lang.MissingMethodException
Message
No signature of method: org.hibernate.collection.PersistentSet.get() is applicable for argument types: (java.lang.Integer) values: [0] Possible solutions: grep(), grep(), grep(java.lang.Object), grep(java.lang.Object), getAt(java.lang.String), getAt(java.lang.String)
24/09/2013 19:43


0
Esqueci de Falar aqui, corrigi o erro anterior mudando o método getTota() da classe Entregas

Ao invés de usar o .each{ it ->

fiz o tradicional FOR(int i=0.....
24/09/2013 19:45


0
Finalizando esse post,
minhas classes ficaram conforme abaixo.
Antes gostaria de ter um feedback se sou eu q to elaborando mal as perguntas, se estou descrevendo coisas bobas ou o que é pois não vejo ninguem me ajudando nos meus posts e isso me desmotiva a aparecer aqui afim de ajudar os outros também uma vez que sempre que preciso não tenho nenhuma resposta.


Voltando ao erro, na verdade tudo estava dando erro por parte nas minhas alterações no GSP.
por isso clocarei aqui as classes groovy e o gsp. Se tiverem dúvida sobre a solução é só perguntar que respondo.

Entregas.groovy

package br.com.aplicacao.sanduiche

import java.util.Date;
import java.util.Formatter.DateTime;

class Entregas {

static hasMany = [pedidos:Pedidos]

Enderecos endereco
Funcionario funcionario
Cliente cliente
EstadoEntregaEnum situacaoEntrega
Date dtEntrega
Date dtSolicitacao
double total = 0


static constraints = {
funcionario nullable:false
endereco nullable:true
dtEntrega nullable:true
dtSolicitacao nullable:true
cliente nullable:true
situacaoEntrega nullable:false
}

double getTotal(){
total=0
if(this.pedidos!=null){
for (ped in this.pedidos){
total = total+ped.getTotal()
}
}
return total
}

}

Pedidos.groovy

package br.com.aplicacao.sanduiche

import br.com.aplicacao.sanduiche.Produtos

class Pedidos {

Produtos produto
int quantidade = 0
String observacao
double total = 0


static transients = ["total "] //***

static constraints = {
quantidade min:1
produto nullable:false, blank:false
}

double getTotal() {
if(produto==null){
produto = new Produtos(preco:0);
}

return produto.getPreco() * quantidade
}
}

edit.gsp


<g:form method="post" >
<g:hiddenField name="id" value="${entregasInstance?.id}" />
<g:hiddenField name="version" value="${entregasInstance?.version}" />
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
<g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" formnovalidate="" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" />
</fieldset>
</g:form>
25/09/2013 01:32



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