Desculpem se o título não foi muito descritivo, mas a dúvida é esta:
Eu tenho, no meu banco de dados, uma tabela Livros e outra Categoria_Livro. A tabela Livros possui um atributo livro_idCategoria, que refere-se ao atributo cat_id da tabela Categoria_Livro.
Minha dúvida surge quando preciso representar isso nas classes Java.
Eu criei uma classe Livro e uma classe CategoriaLivro. Eu devo fazer:
public class Livro {
...
private CategoriaLivro categoria;
...
}
Ou:
public class Livro {
...
private int idCategoria;
...
}
A dúvida veio principalmente porque estou tentando mapear com as Annotations da JPA para o Hibernate… Se alguém puder me explicar como faço isso direitinho também, ficarei agradecido.
Como eu faria então o mapeamento do atributo categoria?
@Column(name="livro_idCategoria")
@ManyToOne
@JoinColumn(name="cat_id") //o que eu coloco aqui, já que categoria não é int?
public CategoriaLivro getCategoria() {
return categoria;
}
public void setCategoria(CategoriaLivro categoria) {
this.categoria = categoria;
}
Assim, na tabela ele é um int, o Hibernate sabe que ele é um int quando vc anota com @ManyToOne ou @OneToOne, então, você deve mapeá-lo para o int que você tem no banco.
Assim:
//@Column(name="livro_idCategoria") // NAO PODE USAR @COLUMN COM @ManyToOne, @OneToOne, @OneToMany e @ManyToMany, quando essas anotações estiverem presente, use @JoinColumn
@ManyToOne
@JoinColumn(name="livro_idCategoria")
public CategoriaLivro getCategoria() {
return categoria;
}