你可以试试
@Proxy (lazy = false)
在两个实体类之上。它适用于我的情况。
使用 Hibernate.initialize(obj) 在你的DAO类逻辑中避免延迟加载异常。
Hibernate.initialize(obj)
你可以尝试以下
@Async @Transactional(propagation = Propagation.REQUIRES_NEW)
您的@Async没有问题,这是由于您的原因造成的 您的实体类,当您将映射从一个声明为多个时,请尝试将fetchType指定为EAGER。有点像这样:
@OneToMany(fetch=FetchType.EAGER) public Collection<Role> getRoleSet(){ ... }
这里的问题是,Spring的AOP代理不会扩展,而是将您的服务实例包装起来以拦截调用。这样做的结果是,在您的服务实例中对“this”的任何调用都直接在该实例上调用,并且不能被包装代理拦截(代理甚至不知道任何此类调用)。 (如中所述) Spring @Transaction方法调用同一个类中的方法,不起作用? )
一种可能的解决方案是从服务中提取事务代码,并将其放在单独的类中。这样,可以拦截对事务方法的调用,并且可以使用事务。
例如。
@Service public class AsyncServiceImpl implements AsyncServiceInt{ @Autowired private SlowProcess slowProcess; @Override @Async public void startSlowProcess(Integer scenarioId) { slowProcess.execute(param); } .. public class SlowProcess { @Transactional public double[] execute() { .. } }