Hibernate deletando ao fazer update

1 resposta
renatomattos2912

Boa tarde,

Tenho 3 Entitys (Usuario, Regra, RegraUsuario)
Quase tudo funcionando perfeitamente porem quando faço um update na entity regra, ele executa o update e após isso exclui os registros associados na entity RegraUsuario. Os dados da tabela associativa RegraUsuario só deveriam ser excluidos se uma Regra ou um usuario fossem excluidos mas não quando fossem alterados, alguem sabe como resolver?

Minha DAO

public abstract class GenericDAO<T extends AbstractEntity> implements
		GenericRepository<T> {
	private final Class<T> classe;

	@SuppressWarnings("unchecked")
	protected GenericDAO() {
		this.classe = (Class<T>) ((ParameterizedType) getClass()
				.getGenericSuperclass()).getActualTypeArguments()[0];
	}

	/* Metodos */
	public void adiciona(T entity) {
		HibernateUtil.currentSession().persist(entity);
	}

	public void altera(T entity) {
		HibernateUtil.currentSession().update(entity);
	}

	@SuppressWarnings("unchecked")
	public T carrega(Long id) {
		return (T) HibernateUtil.currentSession().load(classe, id);
	}

	public void remove(T entity) {
		HibernateUtil.currentSession().delete(entity);
	}

	@SuppressWarnings("unchecked")
	public List<T> lista() {
		return HibernateUtil.currentSession().createCriteria(classe).list();
	}
}

Usuario

@Entity    
@Table(name="INTRA_NESIC_USUARIO")    
public class Usuario extends AbstractEntity{        
    @Column(nullable=false)   
    private String nome;
   
    @Column(nullable=false)   
    private String login; 
    
    @Column(nullable=false)    
    private String senha;    
   
    @NotAudited  
    @ManyToMany(fetch = FetchType.EAGER)  
    @Fetch(FetchMode.SUBSELECT)  
    @BatchSize(size=10) 
    @JoinTable(name = "INTRA_NESIC_REGRA_USUARIO",    
          joinColumns = @JoinColumn(name = "usuario_id"),  
          inverseJoinColumns = @JoinColumn(name = "regra_id"))  
    private List<Regra> regras;

Regra

@Entity    
@Table(name="INTRA_NESIC_REGRA")    
public class Regra extends AbstractEntity {    
    @Column(nullable=false)    
    private String regra; 
    
    @Column(nullable=false)   
    private String descricao;  
    
    @NotAudited  
    @ManyToMany(fetch = FetchType.EAGER)  
    @Fetch(FetchMode.SUBSELECT)  
    @BatchSize(size=10) 
    @JoinTable(name = "INTRA_NESIC_REGRA_USUARIO",    
          joinColumns = @JoinColumn(name = "regra_id"),  
          inverseJoinColumns = @JoinColumn(name = "usuario_id"))  
    private List<Usuario> usuarios;

RegraUsuario

@Entity
@Table(name = "INTRA_NESIC_REGRA_USUARIO")
public class RegraUsuario extends AbstractEntity {

	@ManyToOne
	@JoinColumn(name = "usuario_id")
	private Usuario usuario;

	@ManyToOne
	@JoinColumn(name = "regra_id")
	private Regra regra;

1 Resposta

renatomattos2912

Segue o SQL que é gerado no hibernate, o erro esta no delete que nao deveria ocorrer:

12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: 
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     update
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         INTRA_NESIC_REGRA 
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     set
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         descricao=?,
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         regra=? 
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     where
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         id=?

12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: 
12:44:26,718 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     select
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         regra_.datacad as datacad2_ 
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     from
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         INTRA_NESIC_REGRA regra_ 
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     where
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         regra_.id=?

12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1) Hibernate: 
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     delete 
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     from
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         INTRA_NESIC_REGRA_USUARIO 
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)     where
12:44:26,734 INFO  [stdout] (http-localhost-127.0.0.1-8080-1)         regra_id=?
Criado 14 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 1
Participantes 1