2017-07-06 8 views
0

私は追加の列を持つMany Manyを持っています。ここで実現(ロンボク島で発生したゲッター/セッター、明確にするため取り除か):Hibernate ManyToMany wtih column子の削除

public class User extends BaseEntity { 
@OneToMany(mappedBy = "user", 
     orphanRemoval = true,    
     fetch = FetchType.LAZY 
     cascade = CascadeType.ALL,) 
    private List<UserEvent> attendeeEvents = new ArrayList<>(); 
} 

@Table(
     name = "UC_USER_EVENT", 
     uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "event_id"})} 
) 
public class UserEvent extends BaseEntity { 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "event_id") 
    private Event event; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_id") 
    private User user; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_response_id") 
    private UserResponse userResponse; 
} 

public class Event extends BaseEntity { 
    @OneToMany(mappedBy = "event", 
      orphanRemoval = true, 
      fetch = FetchType.EAGER, 
      cascade = CascadeType.ALL) 
    private List<UserEvent> userEvents = new ArrayList<>(); 
} 

私はこれをしたい - 私は、イベントを削除すると、それに接続されているすべての「UserEventsは、」削除する必要があります。ユーザーを削除すると、すべての "UserEvents"も削除する必要があります。

eventRepository.delete(event); 

次に取得デシベルからUserEvents:

List<UserEvent> userEvents = userEventsId.stream() 
.map(id -> entityManager.find(UserEvent.class, id)).collect(Collectors.toList()); 

そして、2つの項目のコレクションがある(これはUserEventsのカウントである)私は、イベントを削除

は(eventRepositoryは春JPAインターフェースです)しかし、それらはすべて "ヌル"です。

私は何が起こっているか、それを正しく行う方法を理解できません。 私はそれらを削除する必要があります。コレクションをチェックするときには、2ではなく0にする必要があります。

+1

多対1マッピングが「CascadeType.ALL」とマークされているのはなぜですか? 'UserEvent'を削除すると' User'も削除されますか? – crizzis

+1

あなたの質問に関しては、 'filter()'を呼び出さずに2つの要素のストリームで 'map()'を呼び出すと、まだ2つの要素があるストリームになります – crizzis

+0

私はそれが休止状態の問題だと確信していました...ありがとう!私は既にUserEventのCascadeType.Allを削除しましたが、map()は全く認識しませんでした。 – Evgenii

答えて

1

削除にはマークが付けられています。削除後にflushを呼び出してみてください。

データベースには2つの行がありますが、それらをインスタンス化しようとすると削除マークが付いたエンティティを見つけたら、この奇妙な動作が発生します。

リコメンデーション:データベースから詳細を抽出し、注釈を少なくしてください。列と表の名前の規則を学び(必要な場合)、JPAにその仕事をさせてください。

+0

Id(Ids)のコレクションが2のサイズだったのでマップの問題でした。そして、stream()。map()を使用したときにもサイズ2のコレクションが返されました。しかし、2つのヌルがあった。 flushについて - 私はエンティティを削除するとき、それは必要ではありませんが、私がエンティティを更新すると、それを更新せずに正しく動作しません。 – Evgenii

関連する問題