Sou noob mas sou feliz: Oq é uma session do hibernate?

1 resposta
M

uaheaue, então, quando eu faço

no hiber, eu to fazendo oq? pedindo uma conexão do DataSource? …to fuçando no hibernate só agora haeuhauheua :oops: , ai eu vi na documentação q o bom era ter um singleton q te fornecesse sempre a mesma sessão… ai vi um código de um tutorial lá q o cara chamava openSession() a cada método do DAO q ele utilizava… ai, fiquei curioso, esse openSession() ta relacionado ao q??? :roll:

1 Resposta

M

tipo... eu tenho o seguinte singleton q peguei da própria documentação do hiber...

package br.com.develop.dao;

import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.cfg.Configuration;

public class HibernateUtil {

	private static SessionFactory sessionFactory;
	public static final ThreadLocal session = new ThreadLocal();

	static {

		try {
			
			sessionFactory = new Configuration().configure().buildSessionFactory();	
			
		} catch ( HibernateException e ) {
			
			e.printStackTrace();
		}
	}

	private HibernateUtil() {
		
		
	}

	public static Session currentSession() {
		
		Session s = ( Session ) session.get();
		
		try {

			if ( s == null ) {

				s = sessionFactory.openSession();
				session.set( s );
			}
			
		} catch ( HibernateException e ) {
			
			e.printStackTrace();
		}

		return s;
	}

	public static void closeSession() {
		
		Session s = ( Session ) session.get();
		session.set( null );
		
		try {
			
			if ( s != null )
				s.close();

		} catch ( HibernateException e ) {
			
			e.printStackTrace();
		}
	}

}

ta... a unica coisa q ela faz é te retornar uma session do hiber... ai, nos DAOs eu tenho algo como:

package br.com.develop.dao;

import java.util.List;

import net.sf.hibernate.Hibernate;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.HibernateException;

import br.com.develop.model.User;
import br.com.develop.dao.UserDAO;

public class UserDAO {

	public void insertUser( User user ) throws DAOException {

		Session session = HibernateUtil.currentSession();

		try {

			session.save( user );
			session.flush();

		} catch ( HibernateException e ) {

			e.printStackTrace();
			throw new DAOException();

		} finally {

			HibernateUtil.closeSession();
		}
	}


	public User findUserById( int id ) throws DAOException {

		Session session = HibernateUtil.currentSession();
		User user = null;

		try {

		    user = ( User ) session.load( User.class, new Integer( id ) );
		    session.flush();

		} catch ( HibernateException e ) {
		    
		    e.printStackTrace();
		    throw new DAOException();

		} finally {

		    HibernateUtil.closeSession();
		}
		
		return user;
	}


	public List findUserByName( String name ) throws DAOException {

		Session session = HibernateUtil.currentSession();
		List users = null;

		try {

		    users = session.find( "from system_user in class User where system_user.name like ? ", 
		            						"%" + name, 
		            						Hibernate.STRING 
		            		);

		} catch ( HibernateException e ) {

			e.printStackTrace();
			throw new DAOException();

		} finally {

			HibernateUtil.closeSession();
		}
		
		return users;
	}

	// continuação dos métodos do DAO
}

quero saber se esse é o jeito certo de se trabalhar com o hibernate! .. ter um singleton q retorne uma session e todo mundo usa a mesma session... e ter aquele closeSession() lá.... sei lá, eu não to ligado no qq o hiber faz por baixo desse código ai, quero desempenho!

Criado 19 de janeiro de 2005
Ultima resposta 19 de jan. de 2005
Respostas 1
Participantes 1