Annotation não atribui valor a chave estrangeira

Boa tarde a todos.
Desculpe se já houver algo semelhante na comunidade mas eu procurei antes de postar e não achei.
Bem, estou testando o hibernate e uma duvida surgiu.
Criei duas tabelas, Pai e Filhos. Tudo funciou conforme a documentação porém na tabela Filho
o valor da chave estrangeira fica como NULL e com isso perco a referencia da tabela pai.
Alguem pode me ajudar?

Segue os exemplos

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name=“pai”)
public class Pai implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private int idPai;

@Column(name="nome", length=16)
private String Nome;

@Column(name="sobrenome", length=12)
private String Sobrenome;

@Column(name="idade")
private int idade;

@OneToMany(mappedBy="pai", cascade = CascadeType.ALL)	
private List<Filhos> filhos;


//Getters... Setters...

public int getIdPai() {
	return idPai;
}

public void setIdPai(int idPai) {
	this.idPai = idPai;
}

public String getNome() {
	return Nome;
}

public void setNome(String nome) {
	Nome = nome;
}

public String getSobrenome() {
	return Sobrenome;
}

public void setSobrenome(String sobrenome) {
	Sobrenome = sobrenome;
}

public int getIdade() {
	return idade;
}

public void setIdade(int idade) {
	this.idade = idade;
}

public List<Filhos> getFilhos() {
	return filhos;
}

public void setFilhos(List<Filhos> filhos) {
	this.filhos = filhos;
}

}

Tabela filhos

import java.io.Serializable;

import javax.persistence.*;
import javax.persistence.GeneratedValue;

@Entity
@Table(name=“filhos”)
public class Filhos implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private int idFilho;

@Column(name="nome", length=12)
private String nome;

@Column(name="sobrenome", length=16)
private String sobrenome;

private int idade;		

@ManyToOne  
private Pai pai;

public int getIdFilho() {
	return idFilho;
}

public void setIdFilho(int idFilho) {
	this.idFilho = idFilho;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getSobrenome() {
	return sobrenome;
}

public void setSobrenome(String sobrenome) {
	this.sobrenome = sobrenome;
}

public int getIdade() {
	return idade;
}

public void setIdade(int idade) {
	this.idade = idade;
}

}

Ação

public static void main(String[] args) {
Session sessao = null;
Transaction tx;

Pai pai = new Pai();
pai.setIdade(35);
pai.setNome("Guilherme");
pai.setSobrenome("Santos");

Filhos filhos1 = new Filhos();
filhos1.setIdade(1);
filhos1.setNome("Paulo");
filhos1.setSobrenome("Santos");

Filhos filhos2 = new Filhos();
filhos2.setIdade(3);
filhos2.setNome("Flavia");
filhos2.setSobrenome("Santos");

try 
  {
	sessao = HibernateUtil.getSessionFactory().openSession();
	
	//sessao.getTransaction().begin();
	tx = sessao.beginTransaction();		
	sessao.save(filhos1);		
	sessao.save(filhos2);	
	sessao.save(pai);	
	tx.commit();
	//sessao.getTransaction().commit();

	
	
	System.out.println("Conectou");
  }
finally
 {
  sessao.close();	
 }
 }

No banco fica assim (note que a colua pai_idPai) fica com valor null

mysql> select * from pai
-> ;
±------±----------±----------±------+
| idPai | nome | sobrenome | idade |
±------±----------±----------±------+
| 1 | Guilherme | Santos | 35 |
±------±----------±----------±------+
1 row in set (0,00 sec)

mysql> select * from filhos;
±--------±------±-------±----------±----------+
| idFilho | idade | nome | sobrenome | pai_idPai |
±--------±------±-------±----------±----------+
| 1 | 1 | Paulo | Santos | NULL |
| 2 | 3 | Flavia | Santos | NULL |
±--------±------±-------±----------±----------+
2 rows in set (0,00 sec)

É o comportamento padrão e está correto.
O fato de você definir um atributo com a anotação específica, não significa que essa anotação vá transferir o valor da PK de uma entidade para a FK da outra.
Você precisa, invariavelmente, definir quem é o pai da criança (literalmente). E, dentro do objeto de pai, informar quais são os filhos do mesmo.
Basicamente, algo como

Pai pai = new Pai();
pai.setFilhos(new ArrayList<Filho>());
Filho filho1 = new Filho();
Filho filho2 = new Filho();
filho1.setPai(pai);
filho12setPai(pai);
pai.getFilhos().add(filho1);
pai.getFilhos().add(filho2);

Mais ou menos assim.

derlan. Baseado na sua informação eu fiz um modificação que deu certo.
Na classe filhos eu crei o getters e setters para Pai pai, o que eu não havia criado. e passei o pai para cada cad filho tipo filhos.setPai(pa1) e etc.
Funcionou.

Valeu a dica.