Dúvidas sobre categorização de entidades

Olá,

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.

Obrigado.

os dois

Faça o primeiro e anote-o com:
@ManyToOne se quiser fazer N-1
OU
@OneToOne se quiser fazer 1-1

Hum, beleza.

Só mais uma coisa: no método do DAO para buscar livros por categoria, eu faço:

public List<Livro> listaLivrosPorCategoria(CategoriaLivro categoria){
...
}

?

Nesse caso, o que fizer mais sentido para você…

Mas a forma de acessar esse atributo vai ser:

("livro.categoria.id", idCategoria)
// OU
("livro.categoria.id", categoria.getId())

Ah, entendi, valeu!

Rafael,

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;
    }

Então, categoria não é int, mas é como se fosse :smiley:

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; }

Ah, genial!

Obrigado de novo :slight_smile: