Problema com validate e constraint unique
15/07/2014 09:49
0
Bom dia pessoal, tenho o seguinte caso:

No Trip.groovy tenho um atributo do tipo String chamado title e com constraint unique.

Quando salvo uma Trip com título 'Trip1' e salvo novamente com título 'Trip1' o tripInstance.validate() funciona, porém quando salvo pela segunda vez o 'Trip1' só que com outro tenant o validate não dá erro e dá erro no Banco, chave duplicada.

Tentei alterar a constraint do Title para title (unique:'tenantId') daí o comportamento é que consigo salvar 'Trip1' em um tenant, depois consigo salvar em outro tenant só que quando uso o tripInstance.validate ele não pega o erro e dá erro no Banco.

O validate realmente não funciona nesses casos de constraint unique e multi tenant?
Tags: constraints, unique, validate


0
Olá, Ednaldo.

O que pode ter ocorrido é que quando o GORM criou as tabelas suas classes estavam de um jeito. Dai você deve tê-las alterado mas o GORM não mudou mais a estrutura delas no banco. Isso acontece pois o Hibernate (que o GORM usa por baixo) identifica e cria novas estruturas (campos, relacionamentos, etc) e as efetiva nas tabelas, mas não exclui estruturas não mais mapeadas.


0
Olá Yoshi, vlw por tentar ajudar mas o problema não é esse, eu conferi o banco.

O campo title sempre foi unique:true e com isso eu achava que conseguia usar o validate do grails e evitar as repetições de titulo.
Daí descobrí que com outro tenant_id o validate não barra e no banco dá erro, afinal de contas o campo é unique true.
Até este ponto o problema seria o validate do grails que verifica se existe outro titulo igual só no mesmo tenantId.

Daí conversei com o pessoal aqui e definimos que poderia ser único por tenant_id, não na tabela toda.
Então mudei pra title (unique:'tenantId'), apaguei o banco e gerei denovo, no banco ficou assim: CONSTRAINT trip_tenant_id_title_key UNIQUE (tenant_id, title)
Porém, dessa forma eu consigo repetir o titulo em tenantIds diferentes mas o validate do grails nunca barra.
Ou seja, salvo um título, depois salvo o mesmo titulo com o mesmo tenantId e o validate do grails passa e dá erro só no banco.
Problema no validate denovo.

Solução até então, criei um service que valida a unicidade e o chamo no save e no update.

PS: À pedidos do Tiago para explecitar o fato que estou usando o plugin multi-tenant, então, estou usando o plugin multi-tenant.
17/07/2014 14:29


0
Entendi, Ednaldo.

Talvez esse pluhin multi-tenant esteja interferindo no "validate()".

Abraços.



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