gpt4 book ai didi

java - Hibernate 无法初始化代理 - 在线程中访问对象时没有 session

转载 作者:行者123 更新时间:2023-11-30 08:34:49 24 4
gpt4 key购买 nike

如何设置我的 Thread 类以访问父类有权访问的 session ?

目前父类正在使用 SomeObject,它有多个 Set 的对象。这些对象需要由扩展 ThreadDeviceRunner 使用。

此应用程序正在使用 Spring Boot/Spring Data JPA/Hibernate。

更新

是否可以像@Controller 一样@Autowire repository?如下所示的 @Autowired repository 返回 null。

设置@Transactional 允许我处理 SomeObject 的对象,但我无法将 Repository 获取到 Autowire 以便我可以创建/保存?

谢谢

代码 DeviceRunner 扩展线程:

@Transactional(propagation=Propagation.REQUIRED)
public class DeviceRunner extends Thread {

@Autowired
public TestRunRepository repository;

public SomeObject object;

private .....

public DeviceRunner(args.... ) {
// set private variables
}

public void run() {
// do stuff
}

synchronized ....

}

编码一些对象

@Data
@Entity
@Table(name = "test_run")
public class SomeObject {

@ManyToMany(fetch = FetchType.LAZY)
private Set<OtherObjects> otherObjects;

}

测试运行库

@Repository
@Transactional
public interface TestRunRepository extends PagingAndSortingRepository<TestRun, Long> {

}

创建线程的 Rest Controller

@Transactional(propagation=Propagation.REQUIRED)
@RestController
public class HomeController {

@Autowired
public TestRunRepository repository;
....
@Transactional
private void runTestRunOnDevice(TestRun testRun) {


DeviceRunner deviceRunner = new DeviceRunner(testRun);
deviceRunner.start();
while (deviceRunner.isAlive());
}
}

最佳答案

您可以使用带有传播的事务作为必需的,这是默认的。@Transactional(Propagation.REQUIRED)

关于java - Hibernate 无法初始化代理 - 在线程中访问对象时没有 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com