您的位置首页百科词条

hibernate 怎么得到 sessionfactory

hibernate 怎么得到 sessionfactory

的有关信息介绍如下:

hibernate 怎么得到 sessionfactory

Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础。对象的生命周期、事务的管理、数据库的存取都与Session息息相关. Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式 1、getCurrentSession()获得与当前线程绑定的sessionpackage com.deptsystem.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * Hibernate的帮助类,用来获取Session * */ public class HibernateUtil { //将sessionFactory设为静态,可以保证其整个应用程序中的唯一性 private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); private HibernateUtil(){}; //将构造方法设为似有,只做虚能使用“类名+静态方法”的方式调用 /** * 获取Session工厂 * @return SessionFactory */ public static SessionFactory getSessionFactory(){ return sessionFactory; } /** * 获取Session * @return Session */散派 public static Session getSession(){ return sessionFactory.getCurrentSession(); } 测试类部分代码:public static void main(String[] args) { Session session = HibernateUtil.getSession();//获取session session.beginTransaction();//开始事务 User user = (User) session.get(User.class, 1); System.out.println(user.getName()); session.getTransaction().commit();//事务提交 session.close();}2、openSession()打开一个新sessionpackage com.deptsystem.util; import org.hibernate.Session;//hibernate3的 import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; /** * Hibernate的帮助类,冲胡贺用来获取Session * */ public class HibernateUtils { private static SessionFactory factory; static{ try{ //读取hibernate.cfg.xml文件 Configuration cfg=new Configuration().configure(); //建立SessionFactory factory=cfg.buildSessionFactory(); }catch(Exception e){ e.printStackTrace(); } } //获得开启着的Session public static Session getSession(){ return factory.openSession(); } //关闭Session public static void closeSession(Session session){ if(session!=null){ if(session.isOpen()){ session.close(); } } } public static SessionFactory getSessionFactory(){ return factory; } }测试类部分代码:public static void main(String[] args) { Session session = HibernateUtil.getSession();//获取session session.beginTransaction();//开始事务 User user = (User) session.get(User.class, 1); System.out.println(user.getName()); session.getTransaction().commit();//事务提交 session.close();}3、使用注意事项 1)openSession和getCurrentSession的区别 openSession必须关闭,currentSession在事务结束后自动关闭 openSession没有和当前线程绑定,currentSession和当前线程绑定 2)如果使用currentSession需要在hibernate.cfg.xml文件中进行配置: a、如果是本地事务(jdbc事务) thread b、如果是全局事务(jta事务) jta 全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。 本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。