Excluir um item de uma lista ontomany no Hibernate

1 resposta
filipeandrep

Prezados,

estou passando por um problema no momento de atualizar um item Pai. O que ocorre… tenho uma classe chamada Grupo que possui um array de Sessão, quando retiro um item deste array e atualizo Grupo simplesmente o hibernate não exclui este do banco. Segue abaixo as classes:

Grupo

public class Grupo implements java.io.Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE")
    @Column(name = "id_grupo")
    private Long id;
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "cd_turno")
    private Turno turno;
    @OneToMany(cascade ={CascadeType.ALL}, mappedBy = "grupo",targetEntity=Sessao.class)
    @OrderBy("data asc")
    private List<Sessao> sessoes = new ArrayList<Sessao>();
    @Column(name = "cd_visual_grupo")
    private String codigoVisual;
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "cd_instituicao")
    private InstituicaoTabagismo instituicao = new InstituicaoTabagismo();
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "cd_estado_grupo")
    private EstadoGrupo estadoGrupo = new EstadoGrupo(new Long(1));
    @ManyToMany(targetEntity = Paciente.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "tabagismo_grupo_paciente", schema = "tabagismo", joinColumns = {@JoinColumn(name = "cd_grupo")}, inverseJoinColumns = {@JoinColumn(name = "cd_paciente")})
    @OrderBy("nome asc")
    private List<Paciente> pacientes = new ArrayList<Paciente>();
    @ManyToMany(targetEntity = AgenteTabagismo.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "tabagismo_grupo_agente_tabagismo", schema = "tabagismo", joinColumns = {@JoinColumn(name = "cd_grupo")}, inverseJoinColumns = {@JoinColumn(name = "cd_agente_tabagismo")})
    private List<AgenteTabagismo> coordenadores = new ArrayList<AgenteTabagismo>();

Sessao

public class Sessao implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE")
    @Column(name="id_sessao")
    private Long id;
    @Column(name="dt_sessao")
    @Temporal(value = TemporalType.DATE)
    private Date data;
    @ManyToOne
    @JoinColumn(name="cd_grupo")
    private Grupo grupo;
    @OneToMany(mappedBy = "sessao", cascade=CascadeType.ALL)
    private List<Presenca> presencas = new ArrayList<Presenca>();

vale lembrar que eu ja tentei utilizar delete orphans.
desde já agradeço.

1 Resposta

Junio_Fernando

Tente isto:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "grupo")
private List<Sessao> sessoes = new ArrayList<Sessao>();

Comigo da certo!!

valew

Criado 18 de abril de 2008
Ultima resposta 18 de abr. de 2008
Respostas 1
Participantes 2