Hibernate Annotations - ManyToMany de duas tabelas e não três

Pessoal,

Como ficariam as anotações das seguintes tabelas:

create table produto(
id int,
descricao varchar
);

CREATE TABLE produto_relacao
(
id_pai int,
id_filho int,
cardinalidade real,
CONSTRAINT produto_relacao_pk PRIMARY KEY (id_pai, id_filho),
CONSTRAINT id_filho_fk FOREIGN KEY (id_filho) REFERENCES produto (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT id_pai_fk FOREIGN KEY (id_pai) REFERENCES produto (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
)

O que eu tenho até agora é:

@Table(name="produto")
public class Produto {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	private String codigo;
}

e

@Entity
@Table(name="produtoRelacao")
public class ProdutoRelacao {

	@Id
	private Produto produtoPai;
	
	@Id
	private Produto produtoFilho;
	
	private double cardinalidade;
	
}

A particularidade desse caso é que eu quero mapear a relação entre objetos da mesma entidade, e não entre duas entidades diferentes.

Alguem tem alguma dica?

Ah, e eu gostaria de ter um produto e acessar e setar seus filhos e suas cardinalidades.

Abraços.

rdmegna eu n sei examente como seria o auto-relacionamento no hibernate , mas uma coisa q observei é q vc tem dois atributos com a anotação @id, vc sabe se isso realmente funciona?
pq eu por exemplo quando tenho chave composta eu crio uma outra classe para fazer o mapeamento das chaves, no seu contexto eu tentaria assim:

[code]
@Embeddable // a classe sera usada como identificador
public class ChaveCompostaPR implements {

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_pai", referencedColumnName="id")
private Produto produtoPai;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_filho", referencedColumnName="id")
private Produto produtoFilho

//gets e sets

}

@Entity
@Table(name=“produtoRelacao”)
public class ProdutoRelacao {

@EmbeddedId //utilizando a classe como identificador
private ChaveCompostaPR chave;  

//gets e sets

} [/code]

pra falar a verdade eu não testei isso ainda. Mas eu encontrei isso daqui na documentação do hibernate annotationshttp://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier :

2.2.3.2.2. Multiple @Id properties

Another, arguably more natural, approach is to place @Id on multiple properties of my entity. This approach is only supported by Hibernate but does not require an extra embeddable component.

[code]
@Entity
class Customer implements Serializable {
@Id @OneToOne
@JoinColumns({
@JoinColumn(name=“userfirstname_fk”, referencedColumnName=“firstName”),
@JoinColumn(name=“userlastname_fk”, referencedColumnName=“lastName”)
})
User user;

@Id String customerNumber;

boolean preferredCustomer;
}

@Entity
class User {
@EmbeddedId UserId id;
Integer age;
}

@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
}[/code]
In this case Customer being it’s own identifier representation, it must implement Serializable.