Array
(
)

Hibernate - FK nula

Instrutor programador Java
   - 17 mar 2012

Saudações meus caros!!
Estou com um pequeno problema ao criar uma FK, no banco ela esta com valor null. Alguma dica? Segue os códigos:
@Entity
public class Pessoa implements Serializable {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name=id_pessoa)
private Integer id;
private String nome;
private String endereco;
private String cpf;

@OneToMany(mappedBy=pessoa, fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection <Carro> carros;

public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Collection<Carro> getCarros() {
return carros;
}
public void setCarros(Collection<Carro> carros) {
this.carros = carros;
}
@Override
public String toString() {
return nome+endereco+cpf+carros;
}
}
@Entity
public class Carro implements Serializable {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
private String modelo;
private String cor;
private String placa;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name=id_pessoa,insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Pessoa pessoa;

public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public int getId() {
return id;
}
private void setId(int id) {
this.id = id;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
@Override
public String toString() {
return modelo+cor+placa;
}


}

ROBSON PASSARELLA TEIXEIRA
   - 19 mar 2012

Olá Instrutor
O fato da FK existente na tabela carro deve ser por causa de que na instancia do carro o atributo que representa a pessoa dona do mesmo está null.
verifique isso e qualquer coisa só chamar.
espero ter ajudado.
att
robson

Davi Gomes da Costa
   - 19 mar 2012

Vc tem que recuperar a pessoa já existente do banco.
att Davi

Instrutor programador Java
   - 19 mar 2012

PESSOAL OLHA AI O MEU MAIS:
SessionFactory fabrica = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = fabrica.openSession();

Pessoa pessoa = new Pessoa();
pessoa.setNome(Lucas );
pessoa.setCpf(015.049.987-76);
pessoa.setEndereco(Av dois mil e doze);

Carro carro = new Carro();
carro.setModelo(palio );
carro.setCor(azul);
carro.setPlaca(llc 2712);
pessoa.setCarros(new HashSet<Carro>());
pessoa.getCarros().add(carro);
session.beginTransaction();
session.save(pessoa);
pessoa = (Pessoa) session.get(Pessoa.class, 1);
System.out.println(pessoa);
session.getTransaction().commit();
session.close();
SAIDA:
Hibernate: values identity_val_local()
Hibernate: insert into Carro (id, cor, modelo, id_pessoa, placa) values (default, ?, ?, ?, ?)
Hibernate: values identity_val_local()
Hibernate: select pessoa0_.id_pessoa as id1_1_0_, pessoa0_.cpf as cpf1_0_, pessoa0_.endereco as endereco1_0_, pessoa0_.nome as nome1_0_ from Pessoa pessoa0_ where pessoa0_.id_pessoa=?
Hibernate: select carros0_.id_pessoa as id5_1_, carros0_.id as id1_, carros0_.id as id0_0_, carros0_.cor as cor0_0_, carros0_.modelo as modelo0_0_, carros0_.id_pessoa as id5_0_0_, carros0_.placa as placa0_0_ from Carro carros0_ where carros0_.id_pessoa=?
andreAv dois mil e doze015.049.987-76[]
OU SEJA, O HIBERNATE NAO ESTA RETORNANDO O CARRO DA PESSOA COM ID 1 E NO BANCO A TABELA id_pessoa ESTA NULL

ROBSON PASSARELLA TEIXEIRA
   - 19 mar 2012

crie assim seu objeto carro. depois desse trecho você adiciona o carro na collection de carro em pessoa.
Carro carro = new Carro();
carro.setModelo(palio );
carro.setCor(azul);
carro.setPlaca(llc 2712);
carro.setPessoa(pessoa);
att
robson

ROBSON PASSARELLA TEIXEIRA
   - 19 mar 2012

esqueci de mencionar o objeto pessoa passado na linha abaixo tem que está na base de dados, exatamente o que o davi diz.
carro.setPessoa(pessoa);

Instrutor programador Java
   - 20 mar 2012

OKS MEUS CAROS !! CHAVE ESTRANGEIRA RESOLVIDA.
ATT
LUCAS

Davi Gomes da Costa
   - 21 mar 2012

Show de bola Lucas!
Assim que possível favor fechar o chamado.
att Davi

Instrutor programador Java
   - 21 mar 2012

Estou logado mas não aparece nenhuma opção pra fechar ou concluir o chamado.
Alguma outra forma?
att
Lucas

DYEGO SOUZA DO CARMO
   - 14 abr 2012

O forum mudou !
Agora nao precisa mais :)
Valeu !