[英]Hibernate issue: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
[英]Multithreading throws org.hibernate.LazyInitializationException: could not initialize proxy - no Session
當我嘗試在此服務中使用多線程(如果我按順序運行程序沒問題)時,我不斷收到此錯誤:
@Service
@RequiredArgsConstructor
public class Service {
private final Repository repository;
public List<A> getAs(String[] ids) {
List<A> as = Collections.synchronizedList(new ArrayList<>());
List<CompletableFuture<Boolean>> futures = new ArrayList<>();
for (String id : ids) {
futures.add(CompletableFuture.supplyAsync(() -> repository.findById(id).orElse(null)).thenApply(as::add));
}
futures.forEach(CompletableFuture::join);
return as;
}
}
Repository
是一個標准的JpaRepository<A, String>
和A
:
public class A {
@Id
@Column(name = "id")
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "b")
private B b;
}
在返回列表的任何元素上執行A#getB
時拋出錯誤
因為 B 是延遲加載的。
repository.findById(id).map(v -> {v.getB(); return v;}).orElse(null))
public interface ARepository extends JpaRepository<A, String> {
@Query(value = "SELECT c FROM A c LEFT JOIN FETCH c.b where c.id = :id")
A findById(@Param("id") String id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.