Mapeamento Hibernate

Pessoal

Estou com um problema bobo com hibernate, mas que devido a estar há algum tempo afastado do desenvolvimento, não estou conseguindo solucionar, então queria ver se conseguem me ajudar.

O que acontece é o seguinte:

Tenho uma classe Contato:

@Entity
@SequenceGenerator(name = "CONTATO_SEQ", sequenceName = "contato_seq") 
public class Contato {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO,generator="CONTATO_SEQ")
	private Long id;

	@Column(nullable=false)
	private String nome;
		
	@Column(length=1000)
	private String obs;
	
	@OneToMany(cascade={CascadeType.ALL})
	@OrderBy("descricao")
	private List<Telefone> telefones;
	
	//gets and sets
}

e uma classe Telefone:

@Entity
@SequenceGenerator(name = "TELEFONE_SEQ", sequenceName = "telefone_seq") 
public class Telefone {
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO,generator="TELEFONE_SEQ")
	private Long id;
	
	@Column(nullable=false)
	private String descricao;
	@Column(nullable=false)
	private String telefone;
	
	@ManyToOne
	private Contato contato;

	//gets and sets
}

O que eu esperava era que no banco de dados o hibernate criasse uma tabela contatos e uma tabela telefones, e na tabela telefones tivesse um campo contato_id. Isso acontece, mas ele cria mais uma tabela, chamada contato_telefone, que te o id de ambos. Essa tabela seria totalmente desnecessária, certo? tem como evitar a criação dela? Ou estou errando algo no mapeamento?

Obrigado a todos que puderem ajudar.

É por que você não está utilizando o mapeamento corretamente.

Leia aqui: JPA: Mini Livro - Primeiros passos e conceitos detalhados.

Está faltando o mappedBy

Valew cara.

Ja usava o mapped by há muito tempo, mas como fiquei um tempo afastado do desenvolvimento, não lembrei desse detalhe.

Obrigado

Se usar ManyToOne será criada a tabela de junção contato_telefone. Seu relacionamento não seria OneToOne?

Se quiser mapear o relacionamento nas duas entidades, realmente precisará do mappedBy.

Se usar ManyToOne será criada a tabela de junção contato_telefone. Seu relacionamento não seria OneToOne?

Se quiser mapear o relacionamento nas duas entidades, realmente precisará do mappedBy.[/quote]Mesmo OneToOne sem mappedBy o erro acontecerá.

Hebert Coelho, concordo contigo. Da maneira como está o mapeamento será necessário adicionar o mappedBy, pois é bidirecioneal, e OneToOne para que não seja criada a tabela de junção, conforme desejo do paulohrl.