Como posso em JPA fazer a persistência, por exemplo… quando vou gravar as informações, colocar as informações da classe Pessoa na tabela pessoa e a as informações da classe Endereco na tabela endereco,
mas a tabela pessoa tem uma chave estrangeira de endereco (id_endereco), queria gravasse primeiro o endereco e que quando o Endereco fosse gravado pegasse o id de endereco e gravasse em pessoa
Fiz o código abaixo e não deu certo
private EntityManagerFactory factory;
private EntityManager manager;
factory = Persistence.createEntityManagerFactory("banco");
manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
tx.begin();
try
{
manager.persist(endereco);
manager.persist(pessoaFisica);
manager.flush();
manager.clear();
tx.commit();
}
catch (RuntimeException e)
{
tx.rollback();
manager.close();
factory.close();
}
manager.close();
factory.close();
dessa forma não foi, tenho que capturar na mão??? ou tem uma forma de fazer diretamente?
o que tem q ter nas minhas Classes-Entidades? ex: de como estão agora
@Entity
@Table(name = "pessoa_fisica")
public class PessoaFisica
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_pessoa_fisica", nullable = false)
private Integer idPessoaFisica;
@Column(nullable = false)
private String nome;
@OneToOne
@JoinColumn(name = "id_endereco")
private Endereco endereco;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Endereco
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_endereco", nullable = false)
private Integer idEndereco;
@Column(nullable = false)
private String logradouro;
}
@Entity
@Table(name = "pessoa_juridica")
public class PessoaJuridica
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_pessoa_juridica", nullable = false)
private Integer idPessoaJuridica;
@Column(nullable = false)
private String nome;
private String cnpj;
}
Não leve em conta o a PessoaJuridica, porque creio que seja a mesma coisa de um para outro, o que eu alterar em um altero no outro.