Login Registre-se
JPA OneToMany ManyToOne Embeddable EmbeddedId entidade sem pk  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
nascrichardsom

JavaC Membro

Membro desde: 06/05/2014 16:07:46
Mensagens: 4
Offline

Estou precisando persistir uma entidade sem chave primária mas com chave estrangeira.

Tenho as seguintes tabelas.

TAB1 que possui a chave primária tab1_id.
TAB2 que possui a chave estrangeira tab1_id (mesmo nome) referenciando a chave primária da tabela TAB1 (tab1_id).
Para cada TAB1 posso ter nenhum ou muitos TAB2.
Porém TAB2 não possui chave primária, somente a chave estrangeira.



encontrei esses dois tutoriais que parecem ser o que preciso mas não funcionou aqui.

http://goo.gl/UiXy78

http://goo.gl/OKk6iS

acontece esse erro:
Exception Description: The mapping [thing] from the embedded ID class [class entity.ThingOperationId] is an invalid mapping for this class. An embeddable class that is used with an embedded ID specification (attribute [id] from the source [class entity.ThingOperation]) can only contain basic mappings. Either remove the non basic mapping or change the embedded ID specification on the source to be embedded.


E não tenho mais ideia do que fazer.


Se alguém já conseguiu por favor posta um código de exemplo.
[Thumb - Captura de Tela 2015-04-28 às 17.07.01.png]
 Nome do arquivo Captura de Tela 2015-04-28 às 17.07.01.png [Disk] Download
 Descrição tabelas
 Tamanho 12 Kbytes
 Baixado:  136 vez(es)

Esta mensagem foi editada 1 vez. Última atualização foi em 29/04/2015 14:03:51

tiagoberga

Moderador
[Avatar]

Membro desde: 11/03/2014 10:10:20
Mensagens: 441
Offline

nascrichardsom, seja bem vindo ao fórum!

Vou te dar um exemplo simples ó, ai testa pra ver se funciona ai:



Tiago Bergamasco, 24 anos

Computer Scientist pela Centro Universitário Anhanguera
MBA Service-Oriented Architeture (SOA) pela Metrocamp - Ibmec
AngularJS Developer pela Caelum Ensino e Inovação- SP

Ao entrar em contato, por favor identifique-se antes
Site: Arara Tecnologia da Informação
Contatos: Google+, Twitter, Instagram, LinkedIn, Facebook, tiago.bergamasco@gmail.com
Comercial: 19 996050532

"Uma imagem vale mil palavras. Uma interface vale mil imagens." - Ben Shneiderman
[WWW]
nascrichardsom

JavaC Membro

Membro desde: 06/05/2014 16:07:46
Mensagens: 4
Offline

tiagoberga muito obrigado pela resposta.

Seu exemplo funcionou sim, porém não resolve o meu caso.

Dessa maneira que vc exemplificou, o JPA imbute os atributos de PessoaContato na entidade Pessoa, e o insert fica dessa maneira.



o que quer dizer que os atributos de PessoaContato e Pessoa estão na mesma tabela (sgi_pessoa) do bd.

--

No meu caso a entidade Pessoa possui uma lista de entidades PessoaContato (OneToMany).
A entidade PessoaContato não possui chave primária, mas possui chave estrangeira referenciando o a chave primária da entidade Pessoa.

--

o JPA precisa construir um insert assim:



e o select para exemplificar:








Esta mensagem foi editada 5 vezes. Última atualização foi em 29/04/2015 08:48:17

nascrichardsom

JavaC Membro

Membro desde: 06/05/2014 16:07:46
Mensagens: 4
Offline

Resolvido

Encontrei uma discussão em outro forum com um exemplo, e funcinou do jeito que eu esperava.

Abaixo segue o código com alteração nos nomes da classes que estava no exemplo original.








a tabela mss_pessoa é UM para MUITOS de mss_pessoa_contato
porém a tabela mss_pessoa_contato não possui chave primária mas possui uma chave estrangeira (mss_pessoa_contato.pessoa_id) referenciando a chave primária da tabela mss_pessoa (mss_pessoa.pessoa_id).

O mapeamento de UmParaMuitos (OneToMany) é feito normalmente, porém a entidade PessoaContato precisa ter um id imbutido (@EmbeddedId).

Aqui com banco Oracle onde as tabelas já estavam criadas da maneira como falei funcionou perfeito.

Exemplo do modelo como as tabelas foram criadas.



Mas quando tento criar as tabelas pelo JPA (EclipseLink) ele cria do jeito dele e causa o erro abaixo.
Então se for testar, primeiro precisa criar as tabelas no BD, do jeito que foi explicado acima.
Me parece que esse erro ocorre pq quando o JPA cria as tabelas no BD ele coloca o mss_pessoa_contato.pessoa_id como PK.






Esta mensagem foi editada 4 vezes. Última atualização foi em 29/04/2015 13:57:14

 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.9 © JForum Team