Hibernate + VRaptor: Exclusão

5 respostas
P

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

5 Respostas

Lucas_Cavalcanti

fazer o for e excluir uma por uma deveria funcionar…

de qqer forma, vc precisa colocar o cascade no @OneToMany(mappedBy=“projeto”) List pendencias dentro do Projeto… colocar no lado da Pendencia não adianta

P

Valew Lucas. Vou tentar isso amanhã assim que possível e posto aqui o resultado.

Abraço

P

Valew Lucas

Coloquei o atributo na classe Projeto e anotei conforme me indicou e funcionou. Antes eu tinha tentado isso e não tinha funcionado, acho que por eu não ter anotado com mappedBy.

@OneToMany(mappedBy="projeto", cascade={CascadeType.ALL}) 
List<Pendencia> pendencias;

De novo, obrigado.

Abs

Lucas_Cavalcanti

se vc não coloca o mappedBy ele cria dois relacionamentos diferentes! sempre que o relacionamento for bidirecional um dos lados tem que ser mappedBy

P

Faz sentido rs.

Nos outros relacionamentos que tenho eu usei o mappedBy, mas nesse, no desespero de testar e fazer funcionar, passou batido.

Valew

Criado 14 de outubro de 2010
Ultima resposta 15 de out. de 2010
Respostas 5
Participantes 2