Dúvida Hibernate

2 respostas
caiogama

Pessoal,

Tô fazendo um projeto pra faculdade (TCC) e estou com alguns problemas com o Hibernate.

Peguei essa classe útil na Internet

package dao;

/*
 * <p><b>Autor....:</b> mmrack</p>
 * <p><b>Criao..:</b> 20/04/2005 20:29:42</p>
 */



import javax.naming.InitialContext;


import org.hibernate.Session;
import org.hibernate.SessionFactory;

/**
 * <p><b>Descrio:</b> Nenhuma descrio foi definida para essa classe</p>
 * <p><b>Empresa..:</b> 3LAYER</p>
 * <p><b>Sistema..:</b> treeLayer</p>
 * <p><b>Criao..:</b> 20/04/2005 20:29:42</p>
 * @author mmrack
 * @version 1.0
 * @since 20/04/2005 20:29:42
 */
public class HibernateUtil {

	private static SessionFactory sessionFactory;

	

	public static final ThreadLocal session = new ThreadLocal();

	static {
		try {
			
			InitialContext ic = new InitialContext();
			sessionFactory = (SessionFactory) ic.lookup("java:/br/com/treelayer/hibernate/Persistencia");
			
		} catch (Exception e) {
			
		}
	}
	
	/**
	 * Retorna a sesso corrente via ThreadLocal.<br>
	 * Use esse mtodo somente fora do container J2EE.<br> 
	 * <p><b>Autor....:</b> mmrack</p>
	 * <p><b>Criao..:</b> 12/05/2005 18:59:39</p>
	 * @return
	 */
	public static Session currentSession() {
		Session s = (Session) session.get();
		// Open a new Session, if this Thread has none yet
		if (s == null) {
			s = sessionFactory.openSession();
			session.set(s);
		}
		return s;
	}

	/**
	 * Fecha a sesso corrente.<br>
	 * Use esse mtodo somente fora do container J2EE.<br>
	 * <p><b>Autor....:</b> mmrack</p>
	 * <p><b>Criao..:</b> 12/05/2005 19:00:22</p>
	 */
	public static void closeSession() {
		Session s = (Session) session.get();
		if (s != null)
			s.close();
		session.set(null);
	}
	
	/**
	 * Retorna a sesso corrente no EJB.<br>
	 * Use esse mtodo dentro do container J2EE quando as transaes forem gerenciadas pelo container.<br>
	 * Lembre-se, ao usar esse mtodo no  necessrio chamar um "close" na sesso, pois ela ser automaticamente fechada
	 * quando ocorrer o encerramento da transao CMT, ou seja, ao final do mtodo.<br>
	 * <p><b>Autor....:</b> mmrack</p>
	 * <p><b>Criao..:</b> 12/05/2005 18:44:11</p>
	 * @return
	 */
	public static Session getCurrentSession() {
		return sessionFactory.getCurrentSession();
	}	
	
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

}

E pra utilizar essa classe eu fiz esse método

public void insert(User user) throws Exception
	{  
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(user);
		session.getTransaction().commit();
	}

e esse é o código do meu .jsp

<%= usuario.getNome() %>

<%=usuario.inserir(usuario) %>

Só que quando eu mando rodar eu recebo esse erro aqui:

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/Session
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:89)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

Eu tenho CERTEZA que tenho a Classe Session, tanto que uso ela em outras classes e não recebo erros…

Alguém tem algum idéia do que tá de errado??
Se tiverem algum tutorial de Hibernate básico, sem annotations?? já ajudaria…

Obrigadão,
Caio.

2 Respostas

wolmirGarbin

http://www.caelum.com.br/download/caelum-java-web-vraptor-hibernate-ajax-fj28.zip

Cara tem uma apostila da caelum sobre vraptor e hibernate, tem no capitulo 3 e 4 sobre como configurar o hibernate e até inserir produtos no banco de dados só tem um detalhe usa annotations, é bem simples e fácil de entender, muda um pouco da maneira que vc implementou, particularmente acho mais fácil como está na apostila, mas use da maneira que vc acha mais tranquilo pra trabalhar e tem mais facilidade, mas aquilo pode te dar uma base…
Espero ter ajudado!

Wolmir Garbin

ajinfotec

amigo pelo que entendi voce não usa annotations certo, atualmente não trabalho com hibernate sem elas.
mas ja trabalhei quando iniciei meus estudos na frameworks e não conhecia as annotatios.

cara seu problema sem duvida e a forma com ta tentando obter o SessionFactory.

no seu bloco de inicialização estatico tente obter o SessionFactory dessa forma.

static {
        
        sessionFactory = new Configuration().configure().buildSessionFactory();

    }

o configure ira busca seus arquivos de mapeamentos do hibernate *.hbm.xml e tambem o hibernate.cfg.xml
cuido com o local dos arquivos ja que o configure ira busca nos locais padrões.

vlw espero ter ajudado.

Criado 8 de setembro de 2010
Ultima resposta 9 de set. de 2010
Respostas 2
Participantes 3