Sou noob mas sou feliz: Oq é uma session do hibernate?
1 resposta
M
matheusPJ
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:
tipo... eu tenho o seguinte singleton q peguei da própria documentação do hiber...
packagebr.com.develop.dao;importnet.sf.hibernate.Session;importnet.sf.hibernate.SessionFactory;importnet.sf.hibernate.HibernateException;importnet.sf.hibernate.cfg.Configuration;publicclassHibernateUtil{privatestaticSessionFactorysessionFactory;publicstaticfinalThreadLocalsession=newThreadLocal();static{try{sessionFactory=newConfiguration().configure().buildSessionFactory(); } catch ( HibernateException e ) {e.printStackTrace();}}privateHibernateUtil() {}publicstaticSessioncurrentSession() {Sessions=( Session ) session.get();try{if( s == null ) {s=sessionFactory.openSession();session.set( s );}} catch ( HibernateException e ) {e.printStackTrace();}returns;}publicstaticvoidcloseSession() {Sessions=( 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:
packagebr.com.develop.dao;importjava.util.List;importnet.sf.hibernate.Hibernate;importnet.sf.hibernate.Session;importnet.sf.hibernate.Transaction;importnet.sf.hibernate.HibernateException;importbr.com.develop.model.User;importbr.com.develop.dao.UserDAO;publicclassUserDAO{publicvoidinsertUser(Useruser)throwsDAOException{Sessionsession=HibernateUtil.currentSession();try{session.save(user);session.flush();}catch(HibernateExceptione){e.printStackTrace();thrownewDAOException();}finally{HibernateUtil.closeSession();}}publicUserfindUserById(intid)throwsDAOException{Sessionsession=HibernateUtil.currentSession();Useruser=null;try{user=(User)session.load(User.class,newInteger(id));session.flush();}catch(HibernateExceptione){e.printStackTrace();thrownewDAOException();}finally{HibernateUtil.closeSession();}returnuser;}publicListfindUserByName(Stringname)throwsDAOException{Sessionsession=HibernateUtil.currentSession();Listusers=null;try{users=session.find("fromsystem_userinclassUserwheresystem_user.namelike?","%"+name,Hibernate.STRING);}catch(HibernateExceptione){e.printStackTrace();thrownewDAOException();}finally{HibernateUtil.closeSession();}returnusers;}// 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!