java - @PostConstruct 和 "No Hibernate Session bound to thread"异常

标签 java hibernate spring

我必须在我的存储库中做一些数据库工作' @PostConstruct:

@Repository
public class SomeRepositoryHibernate implements SomeRepository {
    private SessionFactory sessionFactory;

    @Autowired
    public SomeRepositoryHibernate(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    ...

    @PostConstruct
    public void doSomestuffWithDb() {
        ...
    }

}

但它失败了:

org.hibernate.HibernateException: No Hibernate Session bound to thread, and 
   configuration does not allow creation of non-transactional one here

有什么简单的解决方案吗?

谢谢!

最佳答案

  • 您在@PostConstruct 中没有正在运行的事务
  • 你不能在那里使用@Transactional(除了mode="aspectj"),所以spring不能启动事务
  • hibernate 需要一个事务来改变数据(插入/更新/删除)

因此,您必须从那里的 session 工厂(通过 .openSession())创建 session 并手动启动事务。

关于java - @PostConstruct 和 "No Hibernate Session bound to thread"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635047/

相关文章:

java - 是否可以使用从同一个类生成的bean

spring - 如何从 Spring Boot 应用程序提供 React 应用程序?

java - 如何在经典(非引导)Spring 应用程序中注册 MessageDispatcherServlet

java - 几张照片后相机 Intent 使我的应用程序崩溃

java - 将 JButton 放在右下角

java - hibernate 设置

java - 像 livejournal 一样显示消息树(java)

java - Hibernate 域对象生成

java - Libgdx:绘制大量粒子

java - Processbuilder 在执行批处理脚本时挂起