Olá pessoal, meu problema é o seguinte:
tenho um relacionamento entre PROCESSO e OBJETO, onde um PROCESSO possui zero ou vários OBJETOs. Para isso fiz:
Processo.hbm.xml
<set name="objetos" cascade="all" lazy="false" order-by="nome asc" >
<key column="processo_id" />
<one-to-many class="br.com.shifti.ri.framework.base.Objeto" />
</set>
e em Objeto.hbm.xml
<class name="br.com.shifti.ri.framework.base.Objeto" table="objeto">
<id name="id" column="objeto_id">
<generator class="increment" />
</id>
<property name="nome" />
</class>
Com isto, vamos exemplificar: em dado momento o PROCESSO “P” possui os OBJETOs “O1” e “O2”. Daí o usuário deseja que apenas o objeto “O1” continue associado a “P”. Como eu utilizo Struts2, na Action eu pego os OBJETOs e seto no PROCESSO e daí então mando atualizar o PROCESSO “P”.
Daí o que acontece é: o Hibernate atualiza a tabela OBJETO para que apenas o OBJETO “O1” esteja associado a “P”, porém o outro OBJETO continua na tabela, com o campo processo_id NULL. A minha questão é: como fazer para que o Hibernate delete este registro, e não apenas sete o processo_id para NULL.
Desde já agradeço a ajuda de todos!
abs,
Sou novato no hibernate, mais qdo passei por um problema parecido utilizei o CASCADE.ALL
e aew Hebertbc,
valeu pela atenção aew…
mas como vc pode ver no código que postei, eu já estou utilizando cascade=“all” no mapeamento:
mas pelo que sei, cascade=“all” serveria se eu deletasse o objeto PROCESSO, pois ai todos os OBJETOS associados ao meu PROCESSO seriam deletados também.
Aki ta um trechodo meu codigo talvez vc entenda.
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idAgendamento")
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
private List<Gruposchecklist> gruposchecklistList;
Quando removo um objeto da lista(gruposchecklistList) e salvo o Agendamento, ele é deletado do banco ficando somente os que continuam na lista.
Alguem consegui resolver, estou com o mesmo problema?
O registro é eliminado da collection, porém, permanece no banco de dados e quando o objeto movimento é recarregado a despesa aparece novamente.
@OneToMany(cascade = CascadeType.ALL,mappedBy="movimento")
private Collection<MovimentoDespesa> despesasMovimento;
@ManyToOne
@JoinColumn(name="movimento_id")
private MovimentoConta movimento;
public void deleteDespesa(ActionEvent event) {
Dao<MovimentoConta> dao = new Dao<MovimentoConta>(HibernateUtil.getSession(), MovimentoConta.class);
MovimentoDespesa movimentoDespesa = (MovimentoDespesa) MyUtil.MyActionEvent(event, "deleteDespesa");
movimentoConta.getDespesasMovimento().remove(movimentoDespesa);
dao.merge(movimentoConta);
}
Resolvi adicionando @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@OneToMany(cascade = CascadeType.ALL, mappedBy="movimento")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Collection<MovimentoDespesa> despesasMovimento;