Eu não consegui entender muito bem em qual das duas entidades do relacionamento eu colocaria o MappedBy nos casos de @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.
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;