HibernateDaoSupport Spring

2 respostas
D

Fala ai Galera !!!
To precisando de umas ajudas !!!

Estou tentando usar hibernateDaoSupport do spring, mas desde que comecei a utilizar meu hibernate comecou a se comportar estranhamente.

O que está acontecendo é que tenho uma entidade Usuario e uma entidade Grupos, possui um relacionamento M:N nestas duas entidades. No meu formulário de cadastro de usuários eu crio uma entidade e Usuário e populo uma lista de grupos que ela possui dentro dela, o problema é que ao persistir a entidade usuário o spring nao está persistindo os grupos que ela possui, ou seja nao esta gravando os grupos do usuário na tabela que faz o join entre usuários e grupos.
Setei nas entidade o cascade para ALL, acho que está tudo certinho.
Gostaria de saber se alguem que utilzou este hibernateDaoSupport do Spring conseguiu fazer isto, vou colocar abaixo meus codigos das duas entidades.

public class Usuario implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "codigo") private Integer codigo; @Basic(optional = false) @Column(name = "nome") private String nome; @Column(name = "sobrenome") private String sobrenome; @Column(name = "cep") private String cep; @Column(name = "logradouro") private String logradouro; @Column(name = "numero") private Integer numero; @Column(name = "complemento") private String complemento; @Column(name = "cpf") private String cpf; @Column(name = "rg") private String rg; @Column(name = "cidade") private String cidade; @Column(name = "foto") private String foto; @Column(name = "dataNascimento") @Temporal(TemporalType.DATE) private Date dataNascimento; @Column(name = "dataCadastro") @Temporal(TemporalType.DATE) private Date dataCadastro; @Column(name = "login") private String login; @Column(name = "senha") private String senha; @Column(name = "telefoneRes") private String telefoneRes; @Column(name = "telefoneCel") private String telefoneCel; @Column(name = "telefoneCom") private String telefoneCom; @Column(name = "email") private String email; @JoinTable(name = "usuario_componente", joinColumns = {@JoinColumn(name = "codUsuario", referencedColumnName = "codigo")}, inverseJoinColumns = {@JoinColumn(name = "codComponente", referencedColumnName = "codigo")}) @ManyToMany(fetch = FetchType.LAZY) private List<Componente> componenteCollection; @JoinTable(name = "usuario_grupo", joinColumns = { @JoinColumn(name = "codUsuario", referencedColumnName = "codigo") }, inverseJoinColumns = { @JoinColumn(name = "codGrupo", referencedColumnName = "codigo") }) @ManyToMany(mappedBy = "usuarioCollection", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Grupo> grupoCollection; @JoinColumn(name = "estado", referencedColumnName = "codigo") @ManyToOne(fetch = FetchType.LAZY) private Estado estado;

@Entity
@Table(name = "grupo")
public class Grupo implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "codigo")
	private Integer codigo;
	@Column(name = "nomeGrupo")
	private String nomeGrupo;
	@Column(name = "descricao")
	private String descricao;
	@JoinTable(name = "usuario_grupo", joinColumns = { @JoinColumn(name = "codGrupo", referencedColumnName = "codigo") }, inverseJoinColumns = { @JoinColumn(name = "codUsuario", referencedColumnName = "codigo") })
	@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<Usuario> usuarioCollection;

2 Respostas

W

cara nao sei a solução do seu prob mas queria uma dica que acho que vai diminuir bastante o tamanho do código
se não me engano nao precisa usar @column() qdo o nome da variável é igual ao nome da coluna

D

Galera,

Consegui resolver!!

Tem que chamar o método flush apos as transações que escrevem no banco:

package br.com.webnetworkmanager.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@SuppressWarnings("unchecked")
public abstract class AbstractSpringDao<T> extends HibernateDaoSupport {

	public AbstractSpringDao() {

	}
	@Transactional(propagation = Propagation.REQUIRED)
	protected void saveOrUpdate(T obj) {
		getHibernateTemplate().saveOrUpdate(obj);	
		getHibernateTemplate().flush();
	}
	@Transactional(propagation = Propagation.REQUIRED)
	protected void delete(Object obj) {
		getHibernateTemplate().delete(obj);
		getHibernateTemplate().flush();
	}

	@Transactional(propagation = Propagation.REQUIRED)
	protected T find(Class<T> clazz, Integer id) {
		return (T) getHibernateTemplate().get(clazz, id);
	}

	@Transactional(propagation = Propagation.REQUIRED)
	protected List<T> findAll(Class<T> clazz) {
		return getHibernateTemplate().find("from " + clazz.getName());
	}
}
Criado 15 de fevereiro de 2009
Ultima resposta 16 de fev. de 2009
Respostas 2
Participantes 2