Grails salva automaticamente mudanças no objeto ao enviá-lo para a View
17/10/2013 11:04
0
Olá pessoal, bom dia!

Estou tendo um problema na minha aplicação.
Quando vou cadastrar um registro novo, busco todos as instancias através do list(), altero uma das propriedades para ficar melhor exposto na tela e depois envio o objeto para a view.
Quando faço isso, o grails automaticamente persiste essa "alteração" no banco de dados.
(mudando o valor toda vez que atualizo a página)
Como faço para evitar isso?

Eis o código:
def create() {
def animes = Anime.list(sort:"titulo")
animes.each{
it.titulo = it.titulo + " [" + it.serie.tipo + "]"
}

[episodioInstance: new Episodio(params), animes:animes]
}

Valor no Banco:
Antes da chamada -> Dragon Ball
Depois da chamada -> Dragon Ball [TV]
Tags: list, persistencia


0
O que vc pode fazer é usar uma propriedade transient, que vc pode altera-la e não muda nada no banco de dados.
Grails Transients
No Link acima explica como usar o transients e no caso vc não irá mais precisar fazer o "each" na sua lista mais!
17/10/2013 11:58


0
Este é um comportamento padrão do Hibernate, por isto que ocorre isto.

O que acontece: para o Hibernate, qualquer alteração que você faça sobre uma classe de domínio implica que a mesma deverá ser uma hora persistida no banco de dados.

No seu caso, como você altera a entidade antes da mesma ser enviada, quando esta vai para a camada de visualização, as alterações ficam em um buffer para que seja enviado ao banco de dados como alteração.

(sinceramente, nunca achei esta uma escolha interessante do projeto Hibernate, but... os caras fizeram isto né? Deve ter alguma razão oculta que justifique isto)

Solução: use sessões stateless. Assim você evita o problema.


0
A sua intenção é a de exibir estes valores formatados na tela e acredito que use uma iteração sobre a coleção de Anime. Talvez não fosse o caso sobrescrever o método toString na classe de domínio? Por padrão ao iterar sobre uma classe de domínio, o método toString é chamado.
Ou pode criar um objeto que represente esta classe de domínio, assim não teria este tipo de problema.



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