如何在不使用 JPA 的情况下保持在 SpringBoot/GraphQL 中打开的 Hibernate 事务?

Posted

技术标签:

【中文标题】如何在不使用 JPA 的情况下保持在 SpringBoot/GraphQL 中打开的 Hibernate 事务?【英文标题】:How do I keep Hibernate transaction opened in SpringBoot/GraphQL without using JPA? 【发布时间】:2019-12-29 18:34:23 【问题描述】:

我正在使用 GraphQL 来重建我的 REST 应用程序。 我遇到的问题之一是 GraphQLResolver 没有重用 GraphQLQueryResolver 中使用的事务。

我知道使用 JPA 和 OpenEntityManagerInViewFilter 会有所帮助,但现在还不能使用 JPA/EntityManager 重写数千个 DAO 来替换 Hibernate Session。

是否有替代方法可以使用“org.springframework.orm.hibernate5.LocalSessionFactoryBean”并仍然为 GraphQLResolver 保持事务打开?

@Component
@Transactional
public class CountryQuery implements GraphQLQueryResolver 

    public List<Country> countries() 
        ...
    


@Component
@Transactional
public class CountryResolver implements GraphQLResolver<Country> 
  public List<Locale> locales(Country country) 
     ...
  

【问题讨论】:

【参考方案1】:

我发现 AsyncTransactionalExecutionStrategy 在这篇文章中有效

LazyInitializationException with graphql-spring

【讨论】:

以上是关于如何在不使用 JPA 的情况下保持在 SpringBoot/GraphQL 中打开的 Hibernate 事务?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不依赖数据库的情况下使用 Hibernate 5 (JPA) 启动 Spring Boot Application 2?

Spring JPA:如何在不丢失数据的情况下进行更新插入

是否可以在不使用 Spring Boot JPA 的情况下测试基于 java 的 CRUD?

如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API

如何在不欺骗编译器的情况下保持这个常量正确?

如何在不使用 ffmpeg 保持视频持续时间的情况下重新采样 FPS?