PK não ser o ID em um relacionamento
25/11/2009 00:00
0
olá!

to me batendo com um problema aqui e não encontro solução, não sei se é possivel fazer
vamos lá...

seguinte, tenho uma tabela CALENDARIO e um TIPO_CALENDARIO:
CREATE TABLE dbo.CALENDARIO
(
id_calendario NUMERIC (19) IDENTITY NOT NULL,
tipo_calendario_sigla VARCHAR (10) NOT NULL,
sigla VARCHAR (15) NOT NULL,
nm_calendario VARCHAR (15) NOT NULL CONSTRAINT CKC_NM_CALENDARIO_CALENDARIO CHECK (char_length(nm_calendario) > 4),
dt_inicio DATE NOT NULL CONSTRAINT CKC_DT_INICIO_CALENDARIO CHECK (datepart(yy,dt_inicio) >= 1900),
dt_fim DATE NOT NULL,
ativo VARCHAR (3) DEFAULT 'Não' NOT NULL CONSTRAINT CKC_ATIVO_CALENDARIO CHECK (ativo in ('Sim','Não')),
version NUMERIC (19) DEFAULT 0 NOT NULL,
CONSTRAINT CKT_CALENDARIO CHECK (dt_fim >= dt_inicio),
CONSTRAINT PK_CALENDARIO PRIMARY KEY (id_calendario)
)
GO

CREATE TABLE dbo.TA_TIPO_CALENDARIO
(
id_ta_tipo_calendario NUMERIC (19) IDENTITY NOT NULL,
sigla VARCHAR (10) NOT NULL,
tipo_calendario VARCHAR (30) NOT NULL CONSTRAINT CKC_TIPO_CALENDARIO_TA_TIPO_CALENDARIO CHECK (char_length(tipo_calendario) > 4),
CONSTRAINT PK_TA_TIPO_CALENDARIO PRIMARY KEY (sigla)
)
GO


a PK da TIPO_CALENDARIO é o campo SIGLA, e tenho la tambem o id identity
na CALENDARIO, tenho a FK TIPO_CALENDARIO_SIGLA, que é a PK sigla da TIPO_CALENDARIO

o que eu estou tentando fazer é no cadastro de calendario, o combobox Tipo Calendario retornar o valor TA_TIPO_CALENDARIO.sigla
mas ele vem por padrão o ID
e se eu tento customizar o select e trocar o optionKey="id" para optionKey="sigla"
da erro de conversão dizendo que deveria vir um Long mas veio um String

pelo que entendi, ele supõe que o valor do combobox tem que ser o id mesmo..

é um problema que eu tenho que contornar porque vou ter varios relacionamentos desse tipo, onde a PK da tabela não é o ID (fica desnormalizado, mas tem que ser assim)

há alguma forma de resolver isso?
valeu.
Tags: Grails


0
coloque o combobox para a gente dar uma olhada .

Abçs
26/11/2009 00:00


0
ai esta:

<tr class=&quot;prop&quot;>
<td valign=&quot;top&quot; class=&quot;name&quot;>
<label for=&quot;tipoCalendario&quot;><b>Tipo Calendario&#58;</b></label>
</td>
<td valign=&quot;top&quot; class=&quot;value ${hasErrors(bean&#58;calendarioInstance,field&#58;'tipoCalendario','errors')}&quot;>
<g&#58;select optionKey=&quot;id&quot; from=&quot;${Ta_tipo_calendario.list()}&quot; name=&quot;tipoCalendario.id&quot; value=&quot;${calendarioInstance?.tipoCalendario?.id}&quot; ></g&#58;select>
</td>
</tr>


esse é o que gera, eu só tentei mudar de id pra sigla...



na verdade eu ja desisti desse jeito, voltei o id do tipo_calendario pra string e tirei o sigla, o id é pk agora, funciona, eu digito o id tudo beleza, mas o grails não valida id assigned unique

é só esse o real problema..

valeu!
26/11/2009 00:00


0
Acho que sei o que deve estar ocorrendo :

vc deve mudar de id para sigla E o campo tipoCalendario.id , pois qdo o controller carrega os dados para o domain, passa do sigla para tipoCalendario.id (que deve ser long), mude name para sigla, e faça a captura por params.sigla.


<g&#58;select optionKey=&quot;sigla&quot; from=&quot;${Ta_tipo_calendario.list()}&quot; name=&quot;sigla&quot; value=&quot;${calendarioInstance?.tipoCalendario?.id}&quot; > </g&#58;select>


Abçs
26/11/2009 00:00



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