Thread
クラスは、親クラスがアクセスできるセッションにアクセスできるように設定できますか?Hibernateがプロキシを初期化できませんでした - スレッド内のオブジェクトにアクセスするときセッションがありません
現在、親クラスはSomeObject
を使用していますが、これは複数のSet
のオブジェクトを持っています。これらのオブジェクトは、Thread
を拡張しているDeviceRunner
によって使用する必要があります。
このアプリケーションは、Spring Boot/Spring Data JPA/Hibernateを使用しています。
更新
はそれが@Controller
のために、私と同じように@Autowire
repository
することは可能ですか?以下に示す@Autowired
repository
はnullを返します。
@Transactionalを設定すると、SomeObjectのオブジェクトを処理することができましたが、Repository
をAutowire
に取得できないため、作成/保存できますか?
@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 ....
}
コードSomeObjectの
@Data
@Entity
@Table(name = "test_run")
public class SomeObject {
@ManyToMany(fetch = FetchType.LAZY)
private Set<OtherObjects> otherObjects;
}
TestRunRepository
012:はスレッドを拡張
コードDeviceRunnerありがとうスレッドを作成
@Repository @Transactional public interface TestRunRepository extends PagingAndSortingRepository<TestRun, Long> { }
休憩コントローラー
@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());
}
}
スレッドからSomeObjectを変更する必要がありますか、それともそれを読み取るだけですか? – takteek
呼び出しメソッドで@Transactional(readOnly = true)が欠落していませんか? – Sarief