2017-03-29 9 views
0

私はメインスレッドでは、エンティティコレクションスローエラーが出ます@ElementCollection「org.hibernate.LazyInitializationException」

public class SmsSending implements Serializable { 
.... 

    @ElementCollection 
    @CollectionTable(name = "sms_msisdns", joinColumns = @JoinColumn(name = "sms_sending_id")) 
    @Column(name = "msisdns") 
    private Set<String> msisdns; 

を持っている私はSet<String> msisdns = smsSending.getMsisdns();を取得し、新しいスレッドに渡します。

executor.submit(new Thread(() -> start(msisdns)); 

そしていつか、私はこれは間違ったパターンであるmsisdns

Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception. 

答えて

-1

にエラーが発生します。あなたは、そのスレッド内にあなたのフェッチされたエンティティを保持したい、そうでなければあなたが言及したような問題が発生します。これは、基盤となるHibernateオブジェクトSessionがスレッドセーフではないため、新しいスレッドを作成するときにセッションが全く存在しないためです。

ルートエンティティのIDをスレッドに渡し、新しいスレッド内でトランザクションを作成し、必要なデータをフェッチします。

関連する問題