Composição + Hibernate = tabela com FK null

Boa noite pessoal

Estou estudando em casa e tentei adaptar uns exercícios da apostila da Caelum (FJ21) para um projeto hipotético de um cursinho pré-vestibular.
Criei meus Models, fiz as anotações do Hibernate, vi que as tabelas foram criadas e consigo persistir nelas, mas quando fui consultar o banco notei que o campo das FK’s de duas tabelas relacionadas permanecem “null”. Estou usando o Eclipse e não aparece nenhum erro quando crio os objetos para preencher as tabelas.

Procurei por tópicos afins mas sou iniciante e sozinho não consegui entender as soluções propostas em outros casos.

Então se alguém puder me ajudar eu agradeço.

Os meus Models são uma classe InscricaoBEANS que é composta por um List de EnderecoBEANS e um List de TelefoneBEANS, entre outros atributos. Então a ideia é que cada Inscrição possa conter mais de 1 ou mais endereços e 1 ou mais telefones.

InscricaoBEANS

package br.net.cursinho.teste;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="inscricao",schema="fj21")
public class InscricaoBEANS {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id_inscricao;
	
    private String nome_inscricao;
    private String email_inscricao;
    
    @Temporal(TemporalType.DATE)
    private Calendar dt_nasc_inscricao;
    
    private String rg_inscricao;
    private String cpf_inscricao;

    @OneToMany(mappedBy="inscricao", targetEntity=EnderecoBEANS.class, cascade=CascadeType.ALL)
    private List<EnderecoBEANS> endereco;
    
    @OneToMany(mappedBy="inscricao", targetEntity=TelefoneBEANS.class, cascade=CascadeType.ALL)
    private List<TelefoneBEANS> telefone;
    
    public int getId_inscricao() {
        return id_inscricao;
    }

    public void setId_inscricao(int id_inscricao) {
        this.id_inscricao = id_inscricao;
    }

    public String getNome_inscricao() {
        return nome_inscricao;
    }

    public void setNome_inscricao(String nome_inscricao) {
        this.nome_inscricao = nome_inscricao;
    }

    public String getEmail_inscricao() {
        return email_inscricao;
    }

    public void setEmail_inscricao(String email_inscricao) {
        this.email_inscricao = email_inscricao;
    }
    
   
    public Calendar getDt_nasc_inscricao() {
        return dt_nasc_inscricao;
    }

    
    public String getDt_nasc_inscricao_formatada() {
        SimpleDateFormat data_formatada = new SimpleDateFormat("dd-MM-yyyy");
        return data_formatada.format(getDt_nasc_inscricao().getTime());
    }
    
    public void setDt_nasc_inscricao(Calendar dt_nasc_inscricao) {
        this.dt_nasc_inscricao = dt_nasc_inscricao;
    }
    
   
    public String getRg_inscricao() {
        return rg_inscricao;
    }

    public void setRg_inscricao(String rg_inscricao) {
        this.rg_inscricao = rg_inscricao;
    }

    public String getCpf_inscricao() {
        return cpf_inscricao;
    }

    public void setCpf_inscricao(String cpf_inscricao) {
    	this.cpf_inscricao = cpf_inscricao;
    }
    
	public List<EnderecoBEANS> getEndereco() {
		return endereco;
	}

	public void setEndereco(EnderecoBEANS endereco) {
		this.endereco = new ArrayList<EnderecoBEANS>();
		this.endereco.add(endereco);
	}

	public List<TelefoneBEANS> getTelefone() {
		return telefone;
	}

	public void setTelefone(TelefoneBEANS telefone) {
		this.telefone = new ArrayList<TelefoneBEANS>();
		this.telefone.add(telefone);
	}
    
}

EnderecoBEANS

package br.net.cursinho.teste;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name="endereco",schema="fj21")
public class EnderecoBEANS {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_end;
    private String rua_end;
    private int num_end;
    private String compl_end;
    private String bairro_end;
    private String cidade_end;
    private String estado_end;
    private String cep_end;
    
    @ManyToOne
    @JoinColumn(name="id_inscricao", insertable=true, updatable=true)
    private InscricaoBEANS inscricao;


    public int getId_end() {
        return id_end;
    }

    public void setId_end(int id_end) {
        this.id_end = id_end;
    }

    public String getRua_end() {
        return rua_end;
    }

    public void setRua_end(String rua_end) {
        this.rua_end = rua_end;
    }

    public int getNum_end() {
        return num_end;
    }

    public void setNum_end(int num_end) {
        this.num_end = num_end;
    }

    public String getCompl_end() {
        return compl_end;
    }

    public void setCompl_end(String compl_end) {
        this.compl_end = compl_end;
    }

    public String getBairro_end() {
        return bairro_end;
    }

    public void setBairro_end(String bairro_end) {
        this.bairro_end = bairro_end;
    }

    public String getCidade_end() {
        return cidade_end;
    }

    public void setCidade_end(String cidade_end) {
        this.cidade_end = cidade_end;
    }

    public String getEstado_end() {
        return estado_end;
    }

    public void setEstado_end(String estado_end) {
        this.estado_end = estado_end;
    }

    public String getCep_end() {
        return cep_end;
    }

    public void setCep_end(String cep_end) {
        this.cep_end = cep_end;
    }
      
}

TelefoneBEANS

package br.net.cursinho.teste;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name="telefone",schema="fj21")
public class TelefoneBEANS {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_telefone;
    private String fixo_telefone;
    private String cel_telefone;

    @ManyToOne
    @JoinColumn(name="id_inscricao", insertable=true, updatable=true)
    private InscricaoBEANS inscricao;
    
    public int getId_telefone() {
        return id_telefone;
    }

    public void setId_telefone(int id_telefone) {
        this.id_telefone = id_telefone;
    }

    public String getFixo_telefone() {
        return fixo_telefone;
    }

    public void setFixo_telefone(String fixo_telefone) {
        this.fixo_telefone = fixo_telefone;
    }

    public String getCel_telefone() {
        return cel_telefone;
    }

    public void setCel_telefone(String cel_telefone) {
        this.cel_telefone = cel_telefone;
    }

}

Inserir_na_Tabela.java

package br.net.cursinho.teste;

import java.util.Calendar;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Inserir_na_Tabela {

	public static void main(String[] args) {
		InscricaoBEANS inscricao = new InscricaoBEANS();
		inscricao.setNome_inscricao("João Silva");
		inscricao.setRg_inscricao("1111111");
		inscricao.setCpf_inscricao("222222222-22");
		
		Calendar data_digitada = Calendar.getInstance();
		data_digitada.set(Calendar.YEAR,1979);
		data_digitada.set(Calendar.MONTH,7);
		data_digitada.set(Calendar.DAY_OF_MONTH,31);
		
		inscricao.setDt_nasc_inscricao(data_digitada);
		inscricao.setEmail_inscricao("joao_silva@yahoo.com.br");
		
		EnderecoBEANS endereco = new EnderecoBEANS();
		endereco.setRua_end("Rua do João");
		endereco.setNum_end(100);
		endereco.setCompl_end("fundos");
		endereco.setBairro_end("Jardim Jardim");
		endereco.setCidade_end("São Paulo");
		endereco.setEstado_end("SP");
		endereco.setCep_end("10000-000");
		
		inscricao.setEndereco(endereco);
		
		TelefoneBEANS telefone = new TelefoneBEANS();
		telefone.setFixo_telefone("11 00000-1111");
		telefone.setCel_telefone("11 00001-2222");
		
		inscricao.setTelefone(telefone);

		EntityManagerFactory factory = Persistence.createEntityManagerFactory("cursinho");
		EntityManager manager = factory.createEntityManager();
		
		manager.getTransaction().begin();
		manager.persist(inscricao);
		manager.getTransaction().commit();
		
		System.out.println("A inscrição de " + inscricao.getNome_inscricao() + " foi registrada sobre o id " + inscricao.getId_inscricao());
				
		manager.close();
				
	}

}

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="cursinho">
  

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>


<class>br.net.cursinho.teste.InscricaoBEANS</class>
<class>br.net.cursinho.teste.EnderecoBEANS</class>
<class>br.net.cursinho.teste.TelefoneBEANS</class>

<properties>

<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>

<property name="javax.persistence.jdbc.url"	value="jdbc:mysql://localhost/fj21?serverTimezone=America/Sao_Paulo"/>

<property name="javax.persistence.jdbc.user" value="root"/>

<property name="javax.persistence.jdbc.password" value="XXXXXXX" />

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />

<property name="hibernate.show_sql" value="true" />

<property name="hibernate.format_sql" value="true" />

<property name="hibernate.hbm2ddl.auto" value="update" />

</properties>

</persistence-unit>
  
</persistence>

E pela busca no banco os dados da FK não foram preenchidos

O que será que eu fiz de errado ?

Valeu !!

Encontrei o meu erro !!!

Apesar de ser uma bobeira, deixo o relato aqui porque pode ajudar outras pessoas.

Inicialmente eu pensava que só de criar um atributo do tipo InscricaoBEANS (com as devidas anotações) nas classes EnderecoBEANS e TelefoneBEANS já resolveria. Achei que o Hibernate sozinho encontraria os caminhos para preencher a FK.

Mas este atributo também precisa dos métodos getters e setters, sem eles o hibernate não consegue preencher a FK (não sei porque eu pensei que somente pros outros atributos era necessário criar os métodos rss).

Então em EnderecoBEANS.java e em TelefoneBEANS.java eu criei :

public InscricaoBEANS getInscricaoBEANS() {
    	return inscricao;
    }
    
    public void setInscricaoBEANS(InscricaoBEANS inscricao) {
    	this.inscricao = inscricao;
    }