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)