Mapeamento JPA de Entidades com o Mesmo ID

14/01/2013

3

Bom dia,

Gostaria de saber se existe a possibilidade de fazer um relacionamento entre entidades que compartilham o mesmo id????

Ex: Tenho uma entidade chamada "Manifestacao" que tem como chave "numeroManifestacao" e tenho outra chamada "Manifestante" que usa a chave da "Manifestacao" como chave primária. Então, as duas entidades tem como pk o "numeroManifestacao".
Responder

Posts

14/01/2013

Davi Costa

É possível sim, é só mapear.

att Davi
Responder

14/01/2013

Danilo Gomes

Cara, dá pra fazer sim, tranquilamente.

Mas faz sentido manifestante ter como chave primária (e não parte) a mesma chave da manifestação?

Não conheço teu caso, a regra de negócio em si, mas me parece mais natural que manifestação tenha uma lista de manifestantes, e numeroManifestação seja chave estrangeira em manifestante.
Responder
Cara, dá pra fazer sim, tranquilamente.

Mas faz sentido manifestante ter como chave primária (e não parte) a mesma chave da manifestação?

Não conheço teu caso, a regra de negócio em si, mas me parece mais natural que manifestação tenha uma lista de manifestantes, e numeroManifestação seja chave estrangeira em manifestante.



É um sistema que foi feito em Struts com persistência JDBC. Estamos reecrevendo usando o JBoss Seam.

Eu estou tentando entender qual era a intenção desse maluco quando pensou nessa modelagem(os envolvido não fazem mais parte do projeto). Na verdade o relacionamento é @OneToOne.... era para o Manifestante ter uma chave composta com a chave do manifestante mais chave da manifestação... mas não sei qual foi a necessidade de se modelar dessa forma.

Mas como eu faria com as anotações para compartilhar essa chave. Pra eu gravar a Manifestação e quando for gravar o Manifestante, ele pegar a mesma chave.

Agradeço pela ajuda.

@Name("manifestacao")
@Entity
@Table(name = "", schema = "")
public class Manifestacao implements java.io.Serializable
{

private long	numeroManifestacao;


@Entity
@Table(name = "", schema = "")
public class Manifestante implements java.io.Serializable
{

private long	   numeroManifestacao;








Responder

15/01/2013

Danilo Gomes

Complicada a situação, tem que ter muito controle emocional pra esses sistemas! rs

O cara quer que só haja um manifestante por manifestação e vice-versa, né?

Cara, tive uma XP com esse tipo de situação, o sistema era à base de Stripes e Ibatis.
Quando reescrevemos, para utilizar o Hibernate, tivemos que fazer scripts para normalizar a base.

Foi um trabalho árduo, mas que simplificou muito o uso do Hibernate.

Na verdade, matamos dois coelhos, o primeiro foi simplificar o desenvolvimento, o segundo foi acabar com uma série de inconsistências que ocorriam devido à modelagem feita inicialmente.

Acha que é inviável esse tipo de trabalho aí?
Responder
Complicada a situação, tem que ter muito controle emocional pra esses sistemas! rs

O cara quer que só haja um manifestante por manifestação e vice-versa, né?

Cara, tive uma XP com esse tipo de situação, o sistema era à base de Stripes e Ibatis.
Quando reescrevemos, para utilizar o Hibernate, tivemos que fazer scripts para normalizar a base.

Foi um trabalho árduo, mas que simplificou muito o uso do Hibernate.

Na verdade, matamos dois coelhos, o primeiro foi simplificar o desenvolvimento, o segundo foi acabar com uma série de inconsistências que ocorriam devido à modelagem feita inicialmente.

Acha que é inviável esse tipo de trabalho aí?




É isso mesmo, uma manifestação por manifestante e vice-versa!!!!

O Pior que é impossível mexer na base por conta do legado e outros problemas com a equipe de AD.

Existe alguma solução com anotação que atenda esse problema??? Sabe como posso fazer???
Responder
É possível sim, é só mapear.

att Davi


Você teria um exemplo desse mapeamento???
Responder

15/01/2013

Danilo Gomes

Cara, é um pouco complicado usar o Hibernate com esse tipo de problema...

Não sei te ajuda, teria que testar, mas tente usar isso:
http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e2235
Responder

15/01/2013

Danilo Gomes

Quer dizer, não conheço o sistema, eu optaria por tentar normalizar a base, mas se é inviável, só consigo pensar em um caso de herança ou um mapeamento de duas tabelas pra uma classe... é feio, mas pode ser que ajude..rs
Responder

22/01/2013

Davi Costa

Vc vai usar @Embeddable e @EmbeddedId

Na classe que tiver o @Embeddable vc coloca sua chave composta com o relacionamento OneToOne e a mais o id da própria tabela como vc citou

E na tabela em si ao invés de @Id vc usará o @EmbeddedId

Pesquisa pelo assunto vc vai resolver em dois tempos

att Davi
Responder

27/07/2013

José

Como a dúvida aparentemente foi sanada, estou dando o tópico por concluído.
Responder