Spring boot 如果我从一个在另一个事务性方法之后调用的方法调用,则不会获取惰性关系

Spring boot 如果我从一个在另一个事务性方法之后调用的方法调用,则不会获取惰性关系,spring-boot,hibernate,spring-transactions,Spring Boot,Hibernate,Spring Transactions,在我的SpringBoot2.2.5.RELEASE应用程序中,当我试图获取一个惰性字段时,我遇到了一个问题 问题出现在服务方法中,createWayBillFromInvoice,该方法标记为@Transactional 案例A:我直接从控制器调用此方法,它可以毫无问题地执行 案例B:我从另一个本身不是事务性的服务方法调用相同的方法 我懒洋洋的田地收不到钱 所以我假设这是关于事务管理的,但我找不到原因 不获取我的惰性字段(并在直接调用中获取)的方法: 这里我的order关系不是空的,但没有初始

在我的SpringBoot2.2.5.RELEASE应用程序中,当我试图获取一个惰性字段时,我遇到了一个问题

问题出现在服务方法中,
createWayBillFromInvoice
,该方法标记为
@Transactional

案例A:我直接从控制器调用此方法,它可以毫无问题地执行

案例B:我从另一个本身不是事务性的服务方法调用相同的方法 我懒洋洋的田地收不到钱

所以我假设这是关于事务管理的,但我找不到原因

不获取我的惰性字段(并在直接调用中获取)的方法:

这里我的
order
关系不是空的,但没有初始化和代理,因此如果调用
order.getOtherRelations
它将返回空

在案例B中,我称之为:

public void create(){ //This method IS NOT Transactional
   invoiceService.createInvoice();//This method is Transactional
   waybillService.createWaybilFromInvoice();//The method declared above
}
我试过:

  • 使
    create
    方法
    Transactional
  • 对于
    createWaybillFromInvoice
以下是一些日志:

2020-06-04 17:17:16.337 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Creating new transaction with name [io.salesart.billingservice.service.impl.WaybillServiceImpl.createWayBillFromInvoice]: 
2020-06-04 17:17:16.376 DEBUG 1208 --- [nio-9002-exec-4] o.s.jdbc.datasource.DataSourceUtils      : Changing isolation level of JDBC Connection [HikariProxyConnection@2044564149 wrapping org.postgresql.jdbc.PgConnection@27db45f] to 2
2020-06-04 17:17:16.450 DEBUG 1208 --- [nio-9002-exec-4] o.h.e.t.internal.TransactionImpl         : On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false
2020-06-04 17:17:16.451 DEBUG 1208 --- [nio-9002-exec-4] o.h.e.t.internal.TransactionImpl         : begin
2020-06-04 17:17:16.451 DEBUG 1208 --- [nio-9002-exec-4] org.postgresql.jdbc.PgConnection         :   setAutoCommit = false
2020-06-04 17:17:16.457 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@caf1ee0]
2020-06-04 17:17:19.532 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Found thread-bound EntityManager [SessionImpl(1021250378<open>)] for JPA transaction
2020-06-04 17:17:16.337调试1208---[nio-9002-exec-4]o.s.orm.jpa.JpaTransactionManager:创建名为[io.salesart.billingservice.service.impl.WaybillServiceImpl.createWayBillFromInvoice]的新交易:
2020-06-04 17:17:16.376调试1208---[nio-9002-exec-4]o.s.jdbc.datasource.datasource实用程序:更改jdbc连接的隔离级别[HikariProxyConnection@2044564149包装org.postgresql.jdbc。PgConnection@27db45f]到2
2020-06-04 17:17:16.450调试1208---[nio-9002-exec-4]o.h.e.t.internal.TransactionImpl:在创建TransactionImpl时,JpaCompliance#isJpaTransactionComplianceEnabled==false
2020-06-04 17:17:16.451调试1208---[nio-9002-exec-4]o.h.e.t.internal.TransactionImpl:开始
2020-06-04 17:17:16.451调试1208---[nio-9002-exec-4]org.postgresql.jdbc.PgConnection:setAutoCommit=false
2020-06-04 17:17:16.457调试1208---[nio-9002-exec-4]o.s.orm.jpa.JpaTransactionManager:将jpa事务公开为JDBC[org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@caf1ee0]
2020-06-04 17:17:19.532调试1208---[nio-9002-exec-4]o.s.orm.jpa.JpaTransactionManager:为jpa事务找到了线程绑定的EntityManager[SessionImpl(1021250378)]

在案例B“LAZY fields not fetch”中,您的问题是?@M.Deinum。请发布实际代码,因为您在此处发布的内容根本无法工作。所以这个代码不是;不是真正的代码,而是一些没有显示问题的简化版本。您的问题是?@M.Deinum,在案例B“LAZY fields not fetch”中。请发布实际代码,因为您在此处发布的内容根本无法工作。所以这个代码不是;不是真正的代码,而是一些没有显示问题的简化版本。
2020-06-04 17:17:16.337 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Creating new transaction with name [io.salesart.billingservice.service.impl.WaybillServiceImpl.createWayBillFromInvoice]: 
2020-06-04 17:17:16.376 DEBUG 1208 --- [nio-9002-exec-4] o.s.jdbc.datasource.DataSourceUtils      : Changing isolation level of JDBC Connection [HikariProxyConnection@2044564149 wrapping org.postgresql.jdbc.PgConnection@27db45f] to 2
2020-06-04 17:17:16.450 DEBUG 1208 --- [nio-9002-exec-4] o.h.e.t.internal.TransactionImpl         : On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false
2020-06-04 17:17:16.451 DEBUG 1208 --- [nio-9002-exec-4] o.h.e.t.internal.TransactionImpl         : begin
2020-06-04 17:17:16.451 DEBUG 1208 --- [nio-9002-exec-4] org.postgresql.jdbc.PgConnection         :   setAutoCommit = false
2020-06-04 17:17:16.457 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Exposing JPA transaction as JDBC [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@caf1ee0]
2020-06-04 17:17:19.532 DEBUG 1208 --- [nio-9002-exec-4] o.s.orm.jpa.JpaTransactionManager        : Found thread-bound EntityManager [SessionImpl(1021250378<open>)] for JPA transaction