`
fuhuijun
  • 浏览: 32095 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sessionFactory.openSession()和sessionFactory.getCurrentSession()区别

阅读更多

getCurrentSession ()   使用当前的 session

openSession()         重新建立一个新的 session

 

-------------------------

SessionFactory.getCurrentSession() Hibernate 应用获取 Session 的常用方法。在调用该方法时, Hibernate 会从 interface CurrentSessionContext 获取当前的 Session ,这是 Hibernate 在不同组件中传递 Session 的方法。

 

CurrentSessionContext 有三个实现,分别是 ThreadLocalSessionContext JTASessionContext ManagedSessionContext

 

ThreadLocalSessionContext Session 与当前线程绑定,是使用较多的一种方案;

JTASessionContext Session JTA 事务绑定,在 JTA 环境中使用;

 

ManagedSessionContext 使应用可以通过 bind() unbind() 方法控制 Session 的绑定,主要在有 Conversation 的应用中使用(如果使用 ManagedSessionContext ,开发人员要做的事情还是很多的)。

 

CurrentSessionContext 实现的选择可以通过 hibernate.current_session_context_class 来配置。

 

另一种更常见的创建 Session 的方法是 openSession()

 

 

openSession() getCurrentSession() 有何不同和关联呢?

 

SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在 getCurrentSession() 被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession() 。在 currentSession() 执行时,如果当前 Session 为空, currentSession 会调用 SessionFactory openSession 。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。

 

再说 ManagedSessionContext ,它提供了更灵活的绑定 Session 的方式,但是使用起来去不简单。

Hibernate CaveatEmptor 实例中有关于使用 ManagedSessionContext 的例子,但更好的选择是使用 Seam Framework

分享到:
评论

相关推荐

    SessionFactory.getCurrentSession与openSession的区别

    博文链接:https://shaqiang32.iteye.com/blog/201918

    新Hibernate SessionFactory().getCurrentSession()猫腻

    当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...

    getCurrentSession 与 openSession() 的区别

    在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...

    开始冬眠_Hibernate教程

    Session session = sessionFactory.getCurrentSession(); session.save(stu); } // 其他方法省略 } ``` #### 总结 通过上述内容的学习,我们可以看出Hibernate作为一款强大的ORM框架,极大地简化了数据库...

    OA项目SSH整合框架

    Assert.assertNotNull(sessionFactory.openSession()); } 2,配置声明式事务(使用基于注解的方式) 1,配置 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework....

    Hibernate4Spring3

    在Spring中,我们可以使用`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`方法获取Session实例。 4. **事务管理**:Spring提供了声明式事务管理,只需在方法上添加@Transactional注解,即可...

    Spring与Hibernate集成中的session

    - 创建`Session`:`SessionFactory.openSession()`或`SessionFactory.getCurrentSession()`(在已配置的事务环境下)。 - 事务开始:`Session.beginTransaction()`。 - 数据操作:如`Session.save()`, `Session....

    Hibernate说明文档.rar_ajax_hibernate

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...

    hibernate登录页面测试

    Session session = sessionFactory.getCurrentSession(); return session.get(User.class, username); } } ``` 4. **服务层(Service Layer)**: 在服务层,我们处理业务逻辑。例如,登录验证通常在`UserService...

    HIBERNATE4开发文档,HIBERNATE4的变化

    - 错误2:`java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session` - 解决方案:由于Hibernate4移除了HibernateDaoSupport,需要改写DAO层,直接使用Hibernate...

    hibernate学习笔记.

    - **Session**是与数据库交互的主要接口,`sessionFactory.openSession()`会创建一个新的Session,需要手动关闭;`sessionFactory.getCurrentSession()`则会在已有的事务上下文中获取或创建Session,自动管理关闭。...

    ssh中getCurrentSession的使用

    2. **为什么使用getCurrentSession()**:与直接调用`openSession()`创建新的Session相比,`getCurrentSession()`有以下优势: - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 -...

    Hibernate3.6(开发必看).pdf

    Session session = sessionFactory.openSession(); ``` 代码展示了如何从配置文件中读取配置信息,构建SessionFactory,再通过SessionFactory来创建Session。 4. ORM映射文件(.hbm.xml)的示例: ```xml <!...

    Hibernate的框架的总结

    本文详细介绍了Hibernate框架中的核心配置文件`hibernate.cfg.xml`及其配置项、映射文件`xxx.hbm.xml`,以及核心API如Configuration和SessionFactory的使用方法,并对C3P0连接池进行了简要说明。通过这些内容的学习...

    Java Hibernate4天学习笔记整理可用于提交作业

    通过SessionFactory.openSession()或getCurrentSession()方法获取Session实例。 五、持久化操作 1. 插入:使用Session的save()或saveOrUpdate()方法插入新记录。 2. 更新:调用Session的update()或saveOrUpdate()...

    spring_hibernate_annotation的三种实现

    - `SessionFactory`和`Session`:在Spring中,我们可以使用`SessionFactory`的`openSession()`方法获取`Session`对象,执行数据库操作。通过`@Autowired`注入`SessionFactory`,然后在需要的地方创建`Session`。 4...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    Session session = sessionFactory.getCurrentSession(); SQLQuery query = session.createSQLQuery("SELECT id, name FROM User WHERE age > :age") .addScalar("id", Hibernate.LONG) .addScalar("name", ...

    hibernate.jar包

    - 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...

Global site tag (gtag.js) - Google Analytics