Mapear one-to-one composto
26/08/2011 00:53
0
Tenho duas classes:

class Cidade implements Serializable {

String codigo
String empresa
String cidade
String uf
//static belongsTo = Endereco

static constraints = {
}

@Override
String toString() {
"${cidade} - ${uf}"
}


static mapping = {
table 'CIDADE'
version false
codigo column: 'CID_CODIGO'
empresa column: 'CID_EMPRESA'
cidade column: 'CID_CIDADE'
uf column: 'CID_UF'
id composite:['codigo', 'empresa'], generator: 'assigned'
}
}

class Endereco implements Serializable {

String entCodigo
String tpEndereco
String empresa
String logradouro
String bairro
String cep
Cidade cidade

static constraints = {
}

static mapping = {
table 'ENDERECO'
version false
entCodigo column : 'ENT_CODIGO'
tpEndereco column : 'TIPO_ENDERECO'
empresa column : 'EMPRESA'
logradouro column : 'END_LOGRADOURO'
bairro column : 'END_BAIRRO'
cep column : 'END_CEP'
id composite:['entCodigo', 'empresa'], generator : 'assigned'
}

}

Não estou conseguindo mapear Cidade dentro de Endereço, se não me preocupar com o mapeamento o gorm faz o serviço mais ele cria mais 2 colunas na minha tabela: codigo_cidade e codigo_empresa, e detalhe não posso alterar a estrutura da tabela pois é uma base de dados legada.

outra coisa tentei mapear cidade assim:
cidade column : ['CID_CODIGO', 'CID_EMPRESA']
porém o recebo a seguinte exception:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.RuntimeException: Cannot treat multi-column property as a single-column property
... 29 more
Caused by: java.lang.RuntimeException: Cannot treat multi-column property as a single-column property

Também tentei mapear os atributos da classe:
cidade.codigo column : 'CID_CODIGO'
cidade.empresa column : 'CID_EMPRESA'

Também sem sucesso o gorm me diz que não encontrou as propriedades codigo e empresa em cidade...
Se alguém já passou por esse problema e puder me ajudar eu agradeço.
Tags: gorm mapping fk column composite


0
Tem algo estranho ai, mas vamos lá:

coloca o código de criação das duas tabelas ou um desc das mesmas....

valeu

26/08/2011 11:32


0
Segue o script de criação das tabelas, o banco usado é o firebird:
CREATE TABLE CIDADE (
CID_CODIGO VARCHAR(4) NOT NULL,
CID_EMPRESA VARCHAR(3) NOT NULL,
CID_UF VARCHAR(2),
CID_CIDADE VARCHAR(40),
CID_DDD VARCHAR(4),
CID_POPULACAO INTEGER,
REG_CODIGO VARCHAR(3),
DATA_ATUALIZACAO DATE,
CID_HORA VARCHAR(8),
CID_COD_IBGE INTEGER,
PAIS_CODIGO VARCHAR(5)
);
ALTER TABLE CIDADE ADD PRIMARY KEY (CID_CODIGO, CID_EMPRESA);

CREATE TABLE ENDERECO (
ENT_CODIGO VARCHAR(10) NOT NULL,
TIPO_ENDERECO VARCHAR(1) NOT NULL,
EMPRESA VARCHAR(3) NOT NULL,
CID_CODIGO VARCHAR(4),
CID_EMPRESA VARCHAR(3),
END_LOGRADOURO VARCHAR(65),
END_FONE VARCHAR(15),
END_BAIRRO VARCHAR(30),
END_CEP VARCHAR(10),
END_OBSERVACAO VARCHAR(50),
END_NUMLOGRADOURO VARCHAR(11)
);
ALTER TABLE ENDERECO ADD PRIMARY KEY (ENT_CODIGO, TIPO_ENDERECO, EMPRESA);
ALTER TABLE ENDERECO ADD FOREIGN KEY (CID_CODIGO, CID_EMPRESA) REFERENCES CIDADE (CID_CODIGO, CID_EMPRESA);
26/08/2011 13:44


0
Consegui fazer o que eu queria passando por params, as duas chaves, depois eu fiz um createCriteria para encontrar os registros desejados, não foi bem o que eu pensava mais funcionou pelo momento.
31/08/2011 15:20



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