3
respostas

MappedBy com @OneToOne e @ManyToMany

Eu não consegui entender muito bem em qual das duas entidades do relacionamento eu colocaria o MappedBy nos casos de @OneToOne e @ManyToMany.

3 respostas

Boa tarde Leandro, o mappedBy é u atributo da anotação @OneToMany

Mas é permitido utilizar MappedBy nos casos de @OneToOne e @ManyToMany. Tanto que no @ManyToOne o eclipse não permite que coloque. Nesses casos seria algo mais específico ou realmente não há necessidade de utilizar?

Assim, quando fazemos um relacionamento nas tabelas, colocamos a pk de uma tabela como fk na outra. Assim o banco ja entende que as duas tabelas se conhecem. Já no java se você tem a classe Livro que possui uma Categoria você anota com @ManyToOne:

@ManyToOne
 private Categoria categoria;

Pelo objeto livro conseguimos pegar sua categoria. E se quisermos saber todos os livros de um certa categoria? Algo como:

categorias.geLivros()

Dai teriamos que criar uma lista de livros em Categoria:

@OneToMany()
 private List<Livro> livros;

Mas para a JPA temos dois relacionamentos diferentes! Ela não sabe que estamos falando do mesmo relacionamento e vai tentar criar uma terceira tabela. Então precisar avisar a JPA que esse relacionamento @OneToMany é o mesmo que o @ManyToOne, isto é, um relacionamento bidirecional, para isso colocamos o mappedBy e falamos qual o nome do objeto relacionado do outro lado:

@OneToMany(mappedBy = "categoria")
 private List<Livro> livros;