`

通过getCurrentSession()获得的Session提交时自动关闭

阅读更多

初学Hibernate时,遇到了一个异常:

org.hibernate.SessionException: Session was already closed。

 

Session session = new AnnotationConfiguration().config().buildSessionFactory().getCurrentSession();
session.beginTransaction();
session.getTransaction.commit();
session.close();

 

 

原因:

 

通过getCurrentSession()方法获得Session对象,当这个对象提交commit()时,Session自动关闭,如果再关闭就会发生这个异常。

分享到:
评论

相关推荐

    getCurrentSession 与 openSession() 的区别

    在这个例子中,`@Transactional`注解由Spring管理事务,Hibernate的`getCurrentSession()`会在需要时提供Session,并在事务结束时自动关闭。 两者的区别主要体现在以下几个方面: 1. **事务管理**:`openSession()...

    ssh中getCurrentSession的使用

    - 它能够自动管理Session的生命周期,比如在请求结束时关闭Session,避免资源泄露。 - 在同一个线程内,如果已经存在一个打开的Session,`getCurrentSession()`会返回这个Session,而不是创建新的,这样可以减少...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    3. **事务管理**:当开启自动事务管理时,getCurrentSession()会在需要时自动开启一个新的事务,并在事务结束时提交或回滚,简化了开发者的事务处理逻辑。 4. **配置与初始化**:SessionFactory的创建通常在应用...

    SessionFactory.getCurrentSession与openSession的区别

    - 用户需要自己管理 `Session` 的生命周期,包括打开、关闭、开始和提交事务等。 - 在非容器环境中,或者在Java SE应用中,通常使用 `openSession()`。 总结来说,`SessionFactory.getCurrentSession()` 更适合在...

    Spring与Hibernate集成中的session

    当Spring与Hibernate集成时,Spring通过其`HibernateTemplate`或`HibernateSessionManager`等类来管理和协调Hibernate的`Session`。`Session`是Hibernate的核心概念,它是与数据库交互的主要接口,用于保存、更新和...

    Hibernate常用总结

    } // 添加方法 public void addJob(JobsDemo job) { // 获得连接对象 session = HibernateSessionFactory.getCurrentSession(); // 开始事务 tr = session.beginTransaction(); // 保存对象 session.save(job); // ...

    如何解决hibernate自动更新实体类的问题共5页.pdf.zip

    然后没有显式地调用`save()`或`update()`方法,而是直接提交事务(通过`SessionFactory.getCurrentSession().flush()`或关闭session),Hibernate会根据它的脏检查机制(Dirty Checking)发现对象的变化,并自动执行...

    hibernate笔记心得

    在使用`getCurrentSession()`时,事务提交后会自动关闭Session,这简化了事务管理和Session管理的工作。 总结来说,学习Hibernate并不仅仅是理解和使用注解、配置事务那么简单,更重要的是理解其背后的对象关系映射...

    hibernate的事务核并发

    在这个模式下,Hibernate会自动处理`Session`的同步和关闭,开发者无需显式调用`flush()`方法,因为`commit()`会自动触发`Session`的同步。 #### JTA环境下的事务处理 当Hibernate运行在支持Java Transaction API ...

    [尚硅谷]_佟刚_Hibernate面试题分析

    - getCurrentSession()在事务提交时自动关闭Session,而openSession()需要手动关闭。 9. 如何调用原生SQL: - 通过Session的doWork()方法调用原生SQL。 10. Hibernate缓存概述: - Hibernate一级缓存(Session...

    hibernate概述

    事务提交或回滚时,`Session` 会自动关闭。 8. **数据流向**: 数据从内存中的对象,通过 `save()` 操作进入 `Session` 的临时区域,`flush()` 将数据同步到持久化状态,最后 `commit()` 将更改提交到数据库。`...

    J2EE考试题目及答案.doc

    `getCurrentSession()`创建的Session与当前线程绑定,事务结束后自动关闭,而`openSession()`则不会自动管理,需要手动关闭。`getCurrentSession()`更适用于需要在同一个事务中操作多个对象的情况。 7. **Session...

    J2EE考试题目及答案定义.pdf

    getCurrentSession创建的Session对象在事务回滚或事务提交后自动关闭,而openSession必须手动关闭。 七、Session中的load()和get()方法 load()和get()方法都是用于从数据库中读取记录的方法,但它们有所...

    J2EE考试题目及答案.docx

    7. **关闭Session**: 关闭Session以释放资源。 #### 五、序列化的意义 序列化的主要目的包括: 1. **持久化**: 使对象的状态能够长期保存。 2. **传输**: 将对象转换为可传输的形式,方便在网络中传输。 3. **...

    10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别

    这种模式下,事务的生命周期与线程绑定,当线程结束时,Session会自动关闭,无需手动调用`close`方法。这使得在Service层进行事务管理变得简单且易于维护。 总的来说,理解和正确配置Hibernate的事务管理及隔离级别...

    spring声明式事务管理解析

    Spring AOP会自动处理事务的开始、提交、回滚以及关闭`Session`等操作。这种方式降低了代码的耦合性,但配置相对复杂,需要在XML配置文件中详细指定事务规则。 2. **使用@Transactional注解** `@Transactional`...

    Java事务管理学习之Spring和Hibernate详解

    当Spring与Hibernate整合时,可以使用`SessionFactory.getCurrentSession()`来获取当前的会话,这个会话将在事务的范围内自动管理。这样,我们就不需要在DAO层手动打开和关闭会话,以及开始和提交事务了。 总的来说...

Global site tag (gtag.js) - Google Analytics