estou com um problema sério: tenho um banco legado para mapear, e estou agora trabalhando com duas tabelas que tem os campos conforme a figura: (os nomes reais das tabelas nao sao esses, mas fiz assim pra ficar mais facil de entender)
Eu criei a @Embeddable para Documento com as três chaves e funcionou.
Depois mapeei Observacao com um @Embeddable com as quatro chaves primárias também.
Referenciei uma lista de observações no Documento e um documento para Observacao. Porém, está dando erro de conversão. Eu pesquisei e uma causa seria o fato de usar Strings como chaves primárias.
O banco é legado, estas duas tabelas nao tem chave primária decente, são essas aí mesmo… Então o que posso fazer para conseguir mapear estas tabelas? Ou tenho que fazer uma sql mesmo pra fazer o Documento carregar as Observacoes e vice-versa?
/* Classe DocumentoPk */@EmbeddablepublicclassDocumentoPkimplementsSerializable{@Column(name="doc_codigo")privateStringcodigo;@Column(name="doc_versao")privateIntegerversao;@Column(name="doc_tp_documento")privateStringtipoDocumento;(...)
/* Classe ObservacaoPk */@EmbeddablepublicclassObservacaoPkimplementsSerializable{@Column(name="obs_num")privateIntegernumero;@Column(name="doc_codigo")protectedStringcodigo;@Column(name="doc_versao")privateIntegerversao;Column(name="doc_tp_documento")privateStringtipoDocumento;(...)
Só uma observação: o campo número de Observação não pode ser usado como @Id, ele é um campo que serve para ordenar as observações de um documento (1a, 2a, 3a …)
O pior é que NENHUMA das tabelas desse banco tem PKs decentes Por isso que eu to precisando desse encaminhamento
Eu to tentando outras formas aqui tb, quando encontrar a resposta eu posto aqui…
Abração
aluisiodsv
O número da observação é ou não é chave primária no banco ?
No embedded não pode ter a anotação Id … tem q ser na entidade.
alineea
É que teve um rapaz que me perguntou porque que eu não usava só o campo número como Id de Observação…
Aí expliquei pra que esse campo serve, e escrevi aqui pra nao ter de novo essa dúvida. A chave de Observação é a combinação do Documento ao qual ele se refere mais o número da observação dentro do documento, que nem tá lá em cima
Então, em nenhuma das etidades tem @Id, está igual eu postei mesmo, só mudei que coloquei que nem vc falou:
@EmbeddablepublicclassObservacaoPkimplementsSerializable{/** * Número da Infração */@Column(name="obs_num")privateIntegernumero;@EmbeddedIdprivateDocumentoPkdocumento;
o resto foi mantido
Obrigada pela atenção!
aluisiodsv
Não sei se vc leu o erro q deu. Mas está me parecendo q a classe InfracaoPk tem a anotação Id. E isto não pode, porque ela é uma classe embedded. Foi este o erro q vc postou.
alineea
Pior que ela não tem.. Nenhumas delas tem.. Mas eu vou chutar aqui uma causa:
@EmbeddablepublicclassInfracaoPkimplementsSerializable{/** * Número da Infração */@Column(name="alim_inf_num")privateIntegernumeroInfracao;@EmbeddedIdprivateAlimPkalim;
tá usando @EmbeddedId duas vezes, pode isso?
obrigada...
aluisiodsv
Huummm … e agora hein ? será isso ?
Vou pesquisar aqui.
alineea
CONSEGUIMOS!!!
Vou só resolver um negócio e já posto aqui!
Mas vc teve participação importante, aluisiodsv!!
30 min que eu já posto os códigos ^^
@EmbeddablepublicclassObservacaoPkimplementsSerializable{/** * Número da Infração */@Column(name="doc_num")privateIntegernumero;@Embedded// E não @EmbeddedIdprivateDocumentoPkdocumento;(...)
Isso por enquanto resolveu meu problema, agora consigo fazer: documento.getListObservacoes()
Tomara que consiga salvar também, mas aqui já é um grande passo…