DevMedia

Hibernate - FK nula

0
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;
}


}
Publicidade

Respostas (9)

0
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
0
Vc tem que recuperar a pessoa já existente do banco.

att Davi
0
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
0
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
0
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);
0
OKS MEUS CAROS !! CHAVE ESTRANGEIRA RESOLVIDA.

ATT

LUCAS
0
Show de bola Lucas!
Assim que possível favor fechar o chamado.

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

att

Lucas
0
O forum mudou !

Agora nao precisa mais :)

Valeu !