Estou usando annotations para mapear uma tabela. Essa tabela possui chaves primárias compostas.
Então crei uma classe para as chaves primárias e utilizei esta classe na minha entidade utilizando @EmbeddedId.
Só que pra fazer isso eu preciso redefinir os métodos equals() e hashCode() da classe contendo as chaves primárias. Eu redefini o método equals() mas naum sei como fazer para o método hashCode().
Tb estou usando JPA e Chave composta....
Desculpa a minha ignorancia mas para que vc usa esses metodos???
Não sei se ajuda eu estou usando o GlassFish e o NetBeans 5.5 e ele criou esses metodos assim p mim:
publicinthashCode() {inthash=0;hash+=(this.id != null ? this.id.hashCode() : 0);hash+=(int)id2;returnhash;}publicbooleanequals(Object object) {//TODO: Warning - this method won't work in the case the id fields are not setif(!(object instanceof idPK)) {returnfalse;}ItemPedidoPKother=(ItemPedidoPK)object;if(this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;if(this.id2 != other.id2) return false;returntrue;}
F
fmpizaniPJ
Olha...eu também não sou expert no assunto não...hehehe...
Mas pelo que andei pesquisando, como você está definindo uma chave composta você precisa redefinir o método equals() para indicar quando dois objetos vão representar o mesmo registro no banco. Por exemplo o meu método ficou assim:
O método hashCode() deve retornar o mesmo valor para dois objetos que representem o mesmo registro, logo também devem ser redefinidos. O meu ficou da seguinte forma:
[code]
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result
+ ((this.topcat == null) ? 0 : this.topcat.hashCode());
result = PRIME * result
+ ((this.mercado == null) ? 0 : this.mercado.hashCode());
return result;
}
[code/]
Eu redefini o método hashCode() utilizando um exemplo que achei na net. Então não entendi muito bem como funciona ainda.
Se alguém souber por favor me explique.
Valeu!!
F
fmpizaniPJ
ynaue,
acho que os métodos equals() e hashCode que inseri na última mensagem não são o problema agora. Acho que não estou criando a classe e primary keys corretamente.
Será que tem como você me passar um exemplo do uso de @EmbeddedId??
É que o mapeamento da classe não está sendo criado corretamente.
Valeu!!
F
fmpizaniPJ
Fala galera!!
Estou evoluindo…hehehe…
Descobri que o problema é que a minha classe onde eu armazeno as minhas chaves primárias não pode conter relacionamentos @ManyToOne. Quando eu utilizo apenas campos sem relacionamento funciona normal. Mas quando eu preciso utilizar uma chave composta onde alguma das chaves é um relacionamento @ManyToOne ocorre o erro.
Se alguém já tiver passado por algo parecido e puder me ajudar.
Obrigado!!!
Y
ynauePJ
Voce conseguiu solucionar esse seu ultimo problema???
Estou com o mesmo!
Um dos itens da minha chave composta é um relacionamento de muito para um. Como eu resolvo isso???
Obs//:Desculpa a ausencia, mas não sei pq não estou recebendo e-mail me notificando que as mensagens estão sendo respondidas.