【问题标题】:Spring hibernate default session managementSpring休眠默认会话管理
【发布时间】:2021-09-28 23:10:54
【问题描述】:

所以我有一个 3 层应用程序。通过 spring boot starter jpa 配置休眠自动。以及使用 @EnableJpaRepositories(enttityManagerFactory, transactionManager, basepackages) 的配置类

我的问题是,如果控制器调用从数据库获取实体的服务,考虑到它仍然是同一个线程,该服务是否可以将该实体传递给其他组件,而不会将其分离?

还是会话基于每个方法级别?也许我需要注释控制器@Transactional?

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    是的,您需要注释控制器。

    【讨论】:

    • 我可以使用 join fetch 来获取尽可能多的数据,然后使用只读事务在以后获取任意多行。
    • @user1555190 join-fetch 不够,您可能需要调用实体上的每个 getter,以便在离开服务层之前让实体快速读取,因为无辜的 getter 可能需要从数据库中读取信息。是的,相同的线程很重要,但同样重要的是相同的连接、会话和事务。如果您离开服务层但仍留在同一个线程中,您将失去连接、会话和事务。此外,您将无法使用 == 运算符比较控制器层中的两个实体和 ...(注释太长)
    • 长话短说:这是个坏主意。
    猜你喜欢
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2015-10-31
    • 2017-06-13
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多