Boa noite, Sérgio!
Então, existem duas coisas que estão conectadas aqui: a aplicação Java do screenmatch e o banco de dados do screenmatch. Cada um deles tem um jeito de representar os dados. No caso da aplicação, temos as classes e objetos. Quando eu digo que setei a serie de um episódio, quero dizer que, pra cada episódio da lista episodios
(que é um campo da classe Serie), eu fiz com que o campo serie
do meu episódio passasse a apontar para a série da classe (this). Então lá na memória do computador, houve essa mudança.
Na nossa aplicação, estamos lidando com objetos. Então o objeto do tipo série "Game of Thrones" tem como atributo uma lista de objetos, que são episódios. Por sua vez, dentro de cada episódio também tem um campo serie
. Então o episódio "Battle of bastards" faz parte dessa lista, mas esse episódio tem uma série associada, que é "Game of Thrones". Quando chamamos o set, estamos justamente falando pra qual série o episódio irá apontar lá na memória.
Quando utilizamos a JPA, juntamente ao Hibernate, queremos transformar essa parte da aplicação em tabelas. Só que na tabela eu não posso "guardar" um objeto inteiro, não posso trabalhar com essa lógica de apontar. Eu não guardo um episódio em uma série, nem o contrário. Por definição mesmo, as relações são feitas por id.
Por baixo dos panos, com todas as anotações e os atributos que configuramos, a JPA vai entender que cada episódio está associado a uma série. Daí, para falar a qual série o episódio está associado, ela pega o id do objeto série, cria um campo serie_id
e guarda esse campo, além de também indicar que serie_id é uma chave estrangeira. Assim, toda vez que precisarmos identificar essa relação, iremos utilizar esses recursos de relacionamentos e chaves estrangeiras no banco. Esse é o mapeamento entre banco de dados e aplicação.
Voltando ao exemplo do Game of Thrones: os objetos da aplicação estão devidamente conectados, mas precisamos passar isso para o banco de dados. Como cadastramos episódios somente depois de cadastrar a série, o episódio já "nasce" com uma série associada. E aí, se na memória o "Battle of Bastards" aponta para Game of Thrones, quando a JPA transforma isso em tabelas, ela olha para o objeto "Game of thrones', verifica que ele tem id 2, por exemplo, e muda o campo serie_id
para 2.
Espero que tenha ficado mais claro!