Implementei certo essa classe Dao com Hibernate?

Olá pessoa desenvolvi minha classe pessoa dessa maneira :

[code]import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Expression;

import br.lib.Dao;
import br.lib.HibernateUtil;
import br.lib.To;
import br.to.PessoaTo;

// Nossa classe implementado a interface Dao
public class PessoaDao implements Dao {

// Método de retorno de um Resultado Unico a partir de sei ID
public To get(To to) {

	// Pegamos a Sessão atual com nossa classe utilitaria HibernateUtil
	Session session = HibernateUtil.currentSession();

	PessoaTo pessoaTo = (PessoaTo) session.createCriteria(PessoaTo.class)
			.add(Expression.eq("idPessoa", ((PessoaTo) to).getIdPessoa()))
			.uniqueResult();

	HibernateUtil.closeSession();

	return pessoaTo;
}

// Método de inserção de dados no Banco de Dados
public To insert(To to) {

	// Pegamos a Sessão atual com nossa classe utilitaria HibernateUtil
	Session session = HibernateUtil.currentSession();

	// Comessamos uma transação a partir de nosso objeto session
	Transaction tx = session.beginTransaction();

	// Salvamos nosso objeto no banco de dados, com um método da API do
	// Hibernate
	session.save((PessoaTo) to);

	// Damos comit nos dados. Agora sim há uma confirmação na inclusão dos
	// dados
	tx.commit();

	// Fecho minha sessão
	HibernateUtil.closeSession();

	// retorno meu to
	return to;
}

// Método que deleta um registro no Banco de Dados
public To delete(To to) {

	// Pegamos a Sessão atual com nossa classe utilitaria HibernateUtil
	Session session = HibernateUtil.currentSession();

	// Comessamos uma transação a partir de nosso objeto session
	Transaction tx = session.beginTransaction();

	// Deletamos nosso objeto no banco de dados, com um método da API do
	// Hibernate
	session.delete((PessoaTo) to);

	// Damos comit nos dados. Agora sim há uma confirmação na inclusão dos
	// dados
	tx.commit();

	// Fecho minha sessão
	HibernateUtil.closeSession();

	// retorno meu to
	return to;
}

// Método de atualização de um registro no Banco de Dados
public To update(To to) {

	// Pegamos a Sessão atual com nossa classe utilitaria HibernateUtil
	Session session = HibernateUtil.currentSession();

	// Comessamos uma transação a partir de nosso objeto session
	Transaction tx = session.beginTransaction();

	// Atualizamos nosso objeto no banco de dados, com um método da API do
	// Hibernate
	session.update((PessoaTo) to);

	// Damos comit nos dados. Agora sim há uma confirmação na inclusão dos
	// dados
	tx.commit();

	// Fecho minha sessão
	HibernateUtil.closeSession();

	// retorno meu to
	return to;

}

// Método para listagem dos registros no Banco de Dados
public List list() {

	// Pegamos a Sessão atual com nossa classe utilitaria HibernateUtil
	Session session = HibernateUtil.currentSession();

	// Retorna lista dos registro do Banco de Dados
	List lista = session.createCriteria(PessoaTo.class).list();

	//HibernateUtil.closeSession();

	return lista;
}

[/code]

só que quando uso ela com o Struts tenho o seguinte erro :


javax.servlet.ServletException: a different object with the same identifier value was already associated with the session: [br.to.PessoaTo#7]

É certo o que estou fazendo de sempre fechar a sessão após abrir com o Hibernate ?

Caso alguem tenha uma implementação mais eficaz porfavor poste.

Valeu :slight_smile:

Og

Opa consegui resolver…

era o

//HibernateUtil.closeSession();

Comentado no método list() :evil:

Cara to começando a conehecr HIBERNATE agora… como eu executo esses metodos na main… eu consegui inserir mas os outros não estão dando erro… pra deletar, update e list…

Valeu