Constraints do Modelo de Dominio
21/06/2012 15:23
0
Carissimos,



estou com o seguinte problema, coloquei um campo com a constraits unique na classe de modelo do dominio, porém quando vou editar outros dados daquele registro permanecendo com o mesmo valor no campo que esta como unique ele esta criticando como se eu estivesse tentando persistir um kra que ja foi registrado assim como no cadastro..

tem como fazer a seguinte constraint ser validada somente no cadastro e não na edição ?
Tags: constraints unique edição update


0
Opa, Rafael.

Tem como publicar o seu codigo? Deve ser algo simples de resolver.

Abraços.
22/06/2012 02:22


0
Bom, acho que me compliquei na pergunta pq na verdade é uma duvida simples ...


Tenho um campo chamado "nome", ele está com a constraints "unique" na classe de modelo de dominio.

Na tela de CADASTRO :
Quero passe pela constraints "unique" e valide se esse nome existe no banco em outros registro da entidade.

Na tela de EDIÇÂO :
Deve passar pelo unique porém validar com relação a outros nomes registrados em outras entidades e não oq já estava cadastrado para aquela entidade.

Oq acontece é que se entro na TELA DE EDIÇÂO e edito outros dados SEM EDITAR O NOME
ele critica que nome ja existe, entenderam o problema ?
22/06/2012 16:28


0
Problema Resolvido ...

Tive que criar uma Constraints validator >>>

validator:{val, obj ->
Long cod = (obj.id ?: new Long(0));
if (ValidacaoUtil.isNotNull(val)) {
def resultado = Modelo.find("from Modelo where id <> ? and campo = ?",[cod,val])
if(resultado) {
return ['default.not.unique.message']
}
}
}


Espero que ajude outros colegas que encontrem o mesmo problema.

Abraços !
25/06/2012 22:01


0
Ops... segue o codigo ai ... rs




validator : {val, obj ->
Long cod = (obj.id ?: new Long(0));
if (ValidacaoUtil.isNotNull(val)) {
def resultado = Modelo.find("from Modelo where id <> ? and campo = ?",[cod,val])
if(resultado) {
return ['default.not.unique.message']
}
}
}
25/06/2012 22:06


1
Fala Rafael...

Cara, porque um nome unique ????? Há alguma regra de negócio do seu domínio que deve proibir veementemente dois "João da Silva" se cadastrarem no seu Sistema, mesmo morando em cidades diferentes e possuindo CPFs diferentes ???

Outra coisa, não entendo porque na alteração o campo estava sendo criticado, você conseguiu descobrir alguma coisa sobre isso ???

Abs []
26/06/2012 14:04


0
Boa tarde Adriano,

bom, na verdade modifiquei os nomes acima para que ficasse menos complexo dq os reais que uso aqui na empresa, ( meu projeto também pertence a Secretaria de Segurança do Estado do Rio de Janeiro, então não posso passar muitos detalhes por medida de segurança ... Oo ) no meu caso realmente não posso ter dois "nomes" iguais para mesmas entidades entende?

Tipo, o mesmo problema ocorreu em 11 UCs que estou desenvolvendo aqui, parece que a constraints faz a validação idependente de que tipo de action que o camarada esta vindo...

Tipo, para a contraints, "salvar" ou "alterar" são apenas nomeações, ela não altera o comportamento só pq eu entendo que no "alterar" ele não deve encrencar com o proprio nome daquela instancia validando comparando pelo nome de outros caras...

Na verdade se vc parar para pensar o Grails devia tratar isso pq se trata de algo comum ...
Se souber de alguma outra forma de resolver isso ficarei feliz em estudar sua solução.


Abraço!
26/06/2012 17:30


0
Não sei o que tem de errado no seu código, mas em condições normais, a constraint unique faz esse tratamendo corretamente. Ele não considera a propriedade do objeto editado na hora de checar se já existe outro com o mesmo valor.
26/06/2012 17:56


0
Oi Rcauler,

você fala com conhecimento de causa ?

Tipo, na sua aplicação você precisava de exatamente o mesmo comportamento que o descrito por mim e simplismente usando o "unique" tudo funcionou perfeitamente ?

Cara, até no link abaixo da documentação de referência do "unique" faz uma critica, entre no link e leia a mensagem em vermelho...

http://grails.org/doc/latest/ref/Constraints/unique.html


Abraço !
26/06/2012 18:39


0
Sim. Já usei várias vezes essa constraint e nunca tive esse tipo de problema.

Nunca tinha reparado nesse warning na documentação, mas o warning diz uma situação específica que é difícil de acontecer.

Em condições normais essa constraint funciona corretamente.

Não sei porque não está funcionando corretamente pra você.

26/06/2012 19:53


0
Nossa,

eu também quero entender oq está aocntecendo, só consegui resolver com
o código que postei mesmo ...

=/

Bom, se alguém já ouviu falar nesse problema e sabe de uma solução melhor,
apesar de já ter matado esse problema gostaria de saber ...



Abraço
26/06/2012 20:02



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