2016-05-10 6 views
1

、Javaの8 ParallelStreamを使用して新しいEntityObjectsを作成するために、これらのエンティティからのデータを使用して、後で使用するために一覧でこれらのEntityObjectsを保存ウェブページアクション豆Iを使用してページをロードしようとしたときランダムHibernateの例外のJava 8 ParallelStreamを使用して

public EntityObject(Entity entity) {...} 

:ように見えるEntityObjectコンストラクタで

List<Entity> entities = dao.getEntities(); 
List<Object> entityObjects = new ArrayList<>(); 
entityObjects.addAll(
     entities.parallelStream() 
       .map(EntityObject::new) 
       .collect(Collectors.toList()) 
); 

私は休止状態を使用してこれらのオブジェクトを作成するには、次を使用するには、エンティティをマッピングされましたHibernateの例外を取得します。私は間違って何をやっている

... ERROR: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance 

... ERROR: Found shared references to a collection 

:彼らは私がページをロードしようとするたびに異なっているが、すべては参照の共有をしなければならない、など?

編集:コードを修正しました。

+2

なぜ、ストリーム操作の結果を直接使用するのではなく、 'entityObjects.addAll'を使用していますか?つまり、リスト entityObjects = entities.stream()。map(entityObjects :: new).collect(Collectors.toList() ); '? – Holger

+1

@darksmurfは最初**おそらく – Eugene

+2

あなたの問題@darksmurfは、おそらくに隠すことが**マップ**一部が間違っている、それは**マップ(EntityObject ::新)である必要があり、その後、あなたのコードで再び見て、ホルガーが言ったことに耳を傾けますあなたが提供したログによってEntityObjectのconstrcutorが判断すると、それも正確に表示できますか? – Eugene

答えて

0

使用

stream() 

代わりの

parallelStream() 

私はそれがどのように動作するのかはよく分かりませんが、parallelStream()を使用すると同時に複数のオブジェクトを操作します。このため、ある時点で同じコレクションへの参照が異なることがあります。これは、Hibernateによって許可されていない特定の状況下であり、例外を引き起こします。

+1

私は間違っていませんが、これは何も説明していません。 – Eugene

関連する問題