Hibernate——SessionFactory产生session的两种方法

来源:互联网 发布:阿里巴巴农村淘宝兰西 编辑:程序博客网 时间:2024/06/05 00:45
SessionFactory可以简单理解为数据库的连接池,用于产生session
产生session有两种方法
(1)Session session = sf.openSession();
(2)Session session = sf.getCurrentSession();


openSession每次都创建一个新的session,需要手动close


getCurrentSession如果没有提交过,一直用同一个session,提交后,新建一个session
(从上下文找,如果有,用旧的,如果没有,建新的)
i.用途,界定事物边界(事物的开始和结束,从beginTransaction到commit transaction)

ii.事物提交自动close


假设有一个addUser()方法,要对数据库执行save(User)和addLog()两个操作,这两个操作要放在一个transaction中,要么同时完成,要么都不完成。此时两个session就要是同一个session,不然不能放在一个transaction中。


public class StudentTest {private static SessionFactory sf=null;@BeforeClasspublic  static void beforeClass(){Configuration cfg = new Configuration();cfg.configure();//解析XML文件,不加参数解析classpath下名字为hibernate.cfg.xml文件ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();sf = cfg.buildSessionFactory(sr);}@Testpublic void test() {Student s = new Student();s.setName("lll");s.setAge(11);//Session session = sf.openSession();Session session = sf.getCurrentSession();session.beginTransaction();session.save(s);session.getTransaction().commit();//session.close();}@AfterClasspublic static void afterClass(){sf.close();}}


getCurrentSession需要配置

<property name="current_session_context_class">thread</property>



阅读全文
0 0
原创粉丝点击