Olá pessoal,
Estou tentando executar um delete de uma unidade que está relacionada a um perfil da seguinte maneira:
@Entity
@Table(name = "perfil")
public class Perfil {
@Id
@Column(name = "perfil_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotNull
private String nome;
@ManyToOne
@JoinColumn(name="unidade_id")
@NotNull
private Unidade unidade;
//..
}
@Entity
@Table(name = "unidade")
public class Unidade {
@Id
@Column(name = "unidade_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String nome;
private String descricao;
//...
}
Método delete:
//Delete
public boolean delete(Unidade unidade) {
try {
entityManager.remove(unidade);
return true;
} catch (Exception ex) {
getFacesContext().addMessage(null,new FacesMessage(ex.getMessage()));
UnidadeDAO.log.error(ex);
return false;
}
}
protected FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
Mas ao tentar executá-lo ocorre o seguinte erro:
2007-10-29 16:54:43,218 ERROR hibernate.util.JDBCExceptionReporter -> Cannot delete or update a parent row: a foreign key constraint fails (`exemplo/perfil`, CONSTRAINT `FKC4E369CC301860CE` FOREIGN KEY (`unidade_id`) REFERENCES `unidade` (`unidade_id`))
2007-10-29 16:54:43,218 ERROR event.def.AbstractFlushingEventListener -> Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
Como posso tratar isto? Pois ao executar o meu método delete, ele não passa no catch…
Alguém pode me dar uma dica?
Obrigada =]

, já quando eu tento deleter uma que está associada a um perfil, ele dá a ConstraintViolationException, está certo, eu sei que uma violação de chave está sendo feita, mas eu gostaria de saber como pegá-la e tratá-la para poder exibir uma mensagem, e não aparecer aquela tela de erro Apache/ Tomcat… :?