Implementei certo essa classe Dao com Hibernate?

2 respostas
Og1

Olá pessoa desenvolvi minha classe pessoa dessa maneira :

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;
	}

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 :)

Og

2 Respostas

Og1

Opa consegui resolver…

era o

//HibernateUtil.closeSession();

Comentado no método list() :evil:

N

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

Criado 16 de outubro de 2006
Ultima resposta 31 de out. de 2006
Respostas 2
Participantes 2