Mapeando auto-relacionamento com chave composta. Como ? [RESOLVIDO]

7 respostas
GraveDigger

Oi Galera,

Gostaria de uma ajuda com a seguinte situação:

Tenho 2 entidades: Country e State

State pertence a um Country, até ai sem problemas.

State possui uma chave composta:

public class StatePK implements Serializable {

	@Column(name="COD_COUNTRY")
	private String idCountry;

	@Column(name="COD_ADM")
	private String idState;

        ...
}

Isso tb está ok, o bicho está pegando aqui:

State é uma entidade que possui um auto-relacionamento, estou tentando:

@ManyToOne
	@JoinColumns( {
			@JoinColumn(name = "COD_ADM_PARENT", referencedColumnName = "COD_ADM", insertable = true, updatable = true),
			@JoinColumn(name = "COD_COUNTRY", referencedColumnName = "COD_COUNTRY", insertable = true, updatable = true) 
	})
	private MasterState parentState;

Mas obtenho o seguinte erro:

Repeated column in mapping for entity: br.com.netsar.model.entity.MasterState column: COD_COUNTRY (should be mapped with insert="false" update="false")

Já tentei fazer o sugerido pela exception mas sem resultado, alguém sabe como resolver isso ?

Grato

7 Respostas

Jarf

Cara, eu estou com esses probleminhas de insertable e updatable aqui tbm… de vez enquando da esse erro, daeh eu tiro os insertables e updatables, salvo e coloco pra rodar, daeh da um novo erro e eu coloco eles novamente e ai funciona.
É estranho mas é verdade. kkkkkkkkkkkkk
Não sei se isso irá te ajudar, aqui esta dando esse problema e assim que estou resolvendo por enquanto. Espero que dê certo com vc tbm.

Abraço!!! :thumbup:

GraveDigger

Eita,

Fiz isso por teste e não funcionou.

Seu DDL é gerado a partir dos seus mapeamentos ?

Isso poderia explicar esse comportamento estranho no seu caso.

Tá difícil achar uma resposta pra isso :frowning:

valeu

Jarf

Opa, vc tem uma solução para o meu? hahahahah
se tiver eu agradeço =P
(o cara poe topico pra ser ajudado e vai ajudar? eita… hehehe )

Po cara, foi mal… eu tentei ajudar, ate porque sou iniciante e como eu estou conseguindo resolver assim não custava tentar ajudar neh :smiley:
Abraço!!!

Jarf

Opa, vc tem uma solução para o meu? hahahahah
se tiver eu agradeço =P
(o cara poe topico pra ser ajudado e vai ajudar? eita… hehehe )

Po cara, foi mal… eu tentei ajudar, ate porque sou iniciante e como eu estou conseguindo resolver assim não custava tentar ajudar neh :smiley:
Abraço!!!

Jarf

eita… q bug é esse? foi a mesma mensagem duas vezes? O.o

GraveDigger

Cara, achei a solução!

O problema, como a exception sugere, é o nome que damos as JoinColumns.

O atributo name não precisa referenciar o nome DA COLUNA, mas eh um nome que deve ser UNICO, dentro do escopo da classe.

Então, no meu caso, eu fiz:

1. @ManyToOne  
   2. @JoinColumns( {  
   3.         @JoinColumn(name = "COD_ADM_PARENT", referencedColumnName = "COD_ADM", insertable = true, updatable = true),  
   4.         @JoinColumn(name = "COD_COUNTRY2", referencedColumnName = "COD_COUNTRY", insertable = true, updatable = true)   
   5. })  
   6. private MasterState parentState;

preste atenção na minha segunda JoinColumn, troquei o atributo name de COD_COUNTRY para COD_COUNTRY2, esse nome não refere-se ao nome da minha coluna(atributo mapeado por referencesColumnName, mas sim ao nome interno, unico, que o JPA irá utilizar.

Espero que ajude voce tb Jarf.

[]'s

Jarf

Ahh cara, obrigado pela dica :wink:
Mas o meu ja esta diferente e eu sabia que deveria ser assim e nem me toquei, mas tbm como eu ia saber se vc colocou o mapeamento… heheh ^^
mesmo assim obrigado pela ajuda mano…
abraço!!

Obs.: não esquece de colocar “[RESOLVIDO]” no topico.

Criado 17 de novembro de 2008
Ultima resposta 17 de nov. de 2008
Respostas 7
Participantes 2