Javafree
Página Inicial do Fórum > Frameworks, APIs e IDE's

JPA OneToMany ManyToOne Embeddable EmbeddedId entidad sem pk



Criar novo tópico   Responder tópico


  1. nascrichard
    Posts:2


    Comment Arrow

    Publicado em: 28/04/2015 19:13:49

    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.



  1. nascrichard
    Posts:2


    Comment Arrow

    Publicado em: 29/04/2015 14:22:38

    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.








  1. Relacionados