O erro que tá acontencendo é que não está deletando o dependente da PessoaFisica, mais abaixo coloquei as Entidades e depois no final as tabelas
no trecho na entidade Dependente tinha @ManyToOne(cascade = CascadeType.ALL) ai deletava, mas deletava pessoaFisica também quando deletava o dependente, tentei jogar ali CascadeType.MERGE, REFRESH, e nada… alguém saberia o porque não deleta???, não dá erro nenhum.
Fiz até uma classe aparte para testar
private EntityManagerFactory factory;
private EntityManager manager;
public static void main(String[] args)
{
TesteClasse testeClasse = new TesteClasse();
PessoaFisica pessoaFisica = testeClasse.busca(2);
List<Dependente> lista = pessoaFisica.getDependentes();
Dependente dependente = lista.get(0);
// tá pegando e removendo certinho
pessoaFisica.getDependentes().remove(dependente);
testeClasse.alterarCadastro(pessoaFisica);
}
public PessoaFisica busca(Integer id)
{
factory = Persistence.createEntityManagerFactory("banco");
manager = factory.createEntityManager();
PessoaFisica pessoaFisica = manager.find(PessoaFisica.class, id);
return pessoaFisica;
}
public boolean alterarCadastro(PessoaFisica pessoaFisica)
{
factory = Persistence.createEntityManagerFactory("banco");
manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
tx.begin();
try
{
pessoaFisica = manager.merge(pessoaFisica);
manager.persist(pessoaFisica);
manager.flush();
manager.clear();
tx.commit();
}
catch (RuntimeException e)
{
tx.rollback();
JOptionPane.showMessageDialog(null, e, "Erro!", 0);
manager.close();
factory.close();
return false;
}
manager.close();
factory.close();
return true;
}
@Entity
@Table(name = "dependentes")
public class Dependente
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_dependentes", nullable = false)
private Integer idDependentes;
@Column(nullable = false)
private String nome;
@ManyToOne
@JoinColumn(name = "id_pessoa_fis")
private PessoaFisica pessoaFisica;
// get e set
public boolean equals(Object obj){
if(obj != null && obj instanceof Dependente){
Dependente dep = (Dependente) obj;
return getIdDependentes()==dep.getIdDependentes();
}
return false;
}
public int hashCode(){
return Integer.valueOf(getIdDependentes()).hashCode()*31;
}
}
@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;
@OneToMany(mappedBy="pessoaFisica", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private List<Dependente> dependentes;
// get e set
Na tabela
–pessoa_fisica–
id_pessoa_fisica pk
nome
–Dependente–
id_dependente pk
nome
id_pessoa_fis fk