Boa tarde
Estou utilizando hibernate e vraptor em um projeto, e preciso de ajuda com o seguinte:
Possuo uma classe Projeto, centro do problema.
Possuo tbm uma classe Pendencia. A classe Pendencia possui um atributo que é um Projeto (e a classe Projeto poderia ter uma lista de Pendencias tbm se for necessário)
@Entity
@SequenceGenerator(name = "PENDENCIA_SEQ", sequenceName = "pendencia_seq")
public class Pendencia implements Comparable<Pendencia>{
@Id
@GeneratedValue(strategy=GenerationType.AUTO,generator="PENDENCIA_SEQ")
private Long id;
@Column(nullable=false)
@Lob
private String descricao;
private Date dataCadastro;
@ManyToOne
private Projeto projeto;
}
Utilizo o controle de sessão do hibernate do próprio VRaptor. Tenho meu DaoFactory marcado com @Component e ele fica disponível nos meus controllers (@Resource).
@Component
public class DaoFactory {
protected Session session;
public DaoFactory (Session session){
this.session = session;
}
public Session getSession() {
return session;
}
public ProjetoDao getProjetoDao () {
return new ProjetoDao(this.session);
}
public PedenciaDao getPedenciaDao () {
return new PedenciaDao(this.session);
}
}
O problema ocorre quando quero excluir um Projeto que tem alguma pendência ligada a ele. Tenho problema de Constraint Violation Exception.
Ja tentei, na classe Pendencia, marcar o atributo Projeto com @ManyToOne(cascade=CascadeType.ALL), mas não resolveu.
Tentei então, no meu controller, pegar uma lista do banco de dados, que traz todas as pendências do projeto. Fiz um loop nessa lista e excluí uma a uma. E em seguida excluí o projeto. O problema é que não funcionou também, acredito que devido ao modo como o vraptor cria a Session do hiubernate e gerencia ela, dando commit apenas no final (se estiver enganado não entendo o porque).
O pessoal que trabalha com isso a bastante tempo deve ter tido algum problema parecido já. Se puderem me ajudar agradeço.
Abraços