Eu não consegui entender muito bem em qual das duas entidades do relacionamento eu colocaria o MappedBy nos casos de @OneToOne e @ManyToMany.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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;