Problema JPA OneToOne bidirecional
Estou com um problema ao criar um relacionamento um para um com JPA.
Criei duas classes Pessoa e Endereco. Pessoa tem um Endereco e Endereco também tem uma Pessoa mas na hora de gravar no banco de dados a tabela endereços não está criando a chave estrangeira que vem de pessoas. Abaixo as três classes, alguém poderia ajudar?
Criei duas classes Pessoa e Endereco. Pessoa tem um Endereco e Endereco também tem uma Pessoa mas na hora de gravar no banco de dados a tabela endereços não está criando a chave estrangeira que vem de pessoas. Abaixo as três classes, alguém poderia ajudar?
@Entity
@Table(name="enderecos")
public class Endereco {
@Id
@GeneratedValue
private long id;
private String nomeRua;
@OneToOne(mappedBy="endereco")
private Pessoa pessoa;
/**
* @return the id
*/
public long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
/**
* @return the nomeRua
*/
public String getNomeRua() {
return nomeRua;
}
/**
* @param nomeRua the nomeRua to set
*/
public void setNomeRua(String nomeRua) {
this.nomeRua = nomeRua;
}
/**
* @return the pessoa
*/
public Pessoa getPessoa() {
return pessoa;
}
/**
* @param pessoa the pessoa to set
*/
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
}@Entity
@Table(name="pessoas")
public class Pessoa {
@Id
@GeneratedValue
private long id;
private String nomePessoa;
@OneToOne
private Endereco endereco;
/**
* @return the id
*/
public long getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}
/**
* @return the nomePessoa
*/
public String getNomePessoa() {
return nomePessoa;
}
/**
* @param nomePessoa the nomePessoa to set
*/
public void setNomePessoa(String nomePessoa) {
this.nomePessoa = nomePessoa;
}
/**
* @return the endereco
*/
public Endereco getEndereco() {
return endereco;
}
/**
* @param endereco the endereco to set
*/
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
}
public class Executa {
public static void main(String[] args){
EntityManager manager = JPAUtil.getEntityManager();
Pessoa pessoa = new Pessoa();
Endereco endereco = new Endereco();
pessoa.setNomePessoa("Pedro Paulo");
endereco.setNomeRua("Massaharu Tanigushi");
pessoa.setEndereco(endereco);
endereco.setPessoa(pessoa);
manager.getTransaction().begin();
manager.persist(pessoa);
manager.persist(endereco);
manager.getTransaction().commit();
manager.close();
System.out.println("Gravado com sucesso");
}
}Paulo Henrique
Curtidas 0
Respostas
Ronaldo Lanhellas
19/05/2015
Mude seu método execute() para o método abaixo e teste novamente:
public class Executa {
public static void main(String[] args){
EntityManager manager = JPAUtil.getEntityManager();
Pessoa pessoa = new Pessoa();
Endereco endereco = new Endereco();
pessoa.setNomePessoa("Pedro Paulo");
endereco.setNomeRua("Massaharu Tanigushi");
pessoa.setEndereco(endereco);
endereco.setPessoa(pessoa);
manager.getTransaction().begin();
pessoa = manager.persist(pessoa);
endereco.setPessoa(pessoa);
manager.persist(endereco);
manager.getTransaction().commit();
manager.close();
System.out.println("Gravado com sucesso");
}
}
GOSTEI 0
Paulo Henrique
19/05/2015
Olá Ronaldo obrigado pela resposta.
Então ele nem deixa pessoa receber manager.persist(pessoa), dá erro logo de cara, tipos incompatíveis.
Então ele nem deixa pessoa receber manager.persist(pessoa), dá erro logo de cara, tipos incompatíveis.
GOSTEI 0
Paulo Henrique
19/05/2015
Obrigado mais uma vez. Consegui resolver.
Eu estava confundindo as coisas se eu quisesse colocar uma chave estrangeira nas duas tabelas eu teria que remover o mappedBy mas não era esse o caso. Valeu pela ajuda.
Eu estava confundindo as coisas se eu quisesse colocar uma chave estrangeira nas duas tabelas eu teria que remover o mappedBy mas não era esse o caso. Valeu pela ajuda.
GOSTEI 0
Ronaldo Lanhellas
19/05/2015
Tudo bem, disponha.
GOSTEI 0
Ronaldo Lanhellas
19/05/2015
Tudo bem, disponha.
GOSTEI 0
Ronaldo Lanhellas
19/05/2015
Tudo bem, disponha.
GOSTEI 0