ManyToMany - session.refresh() antes do session.saveOrUpdate()

2 respostas
daniel.joppi

Estava com o um problema de org.hibernate.AssertionFailure: collection was not processed by flush quando tentava salva um usuário no banco.

Para resolver esse problema eu modifiquei a sequencia de persisitência para que antes de fazer o update o sistema realiza-se um refresh na sessão.

session.refresh(o);
session.saveOrUpdate(o);

session.flush();
trans.commit();
                
session.close();

Até ai tudo bem ... mas acontece que as relações @ManyToMany pararam de funcionar. Não consigo mais salva-las.

@ManyToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST }, fetch = FetchType.LAZY, targetEntity = SysDepartment.class)
    @JoinTable(name = "SYSTB_Department_users", 
    	joinColumns = {@JoinColumn(name="users_id", referencedColumnName = "id")}, 
    	inverseJoinColumns = {@JoinColumn(name="departments_id", referencedColumnName = "id")}
    )
    @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	public Set<SysDepartment> getDepartments() {
    	if(departments == null) {
    		departments = new LinkedHashSet<SysDepartment>();
    	}
		return departments;
	}

alguém tem alguma idéia?

2 Respostas

fabiomedeirosf

Olá Daniel,

Fiz um post no meu blog sobre o mapeamento many to many, embora vc esteja usando hiernate puro, verá que no post usei hibernate apenas como provide do JPA, mas talvez possa te ajudar, dê uma olhada: http://serjava.blogspot.com.br/2012/05/jpa-manytomany.html

daniel.joppi

faz refresh antes do persist?

Criado 29 de junho de 2012
Ultima resposta 29 de jun. de 2012
Respostas 2
Participantes 2