2017-07-26 3 views
1

私は、ユーザーとイベントの間に多くの関係があります。私はリレーショナルテーブルに余分な列を持つ必要があります。私がやったID:@ManyToMany余分の列 - Springデータを介して読み込む方法

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy="user") 
    private Set<EventUser> eventUsers = new HashSet<>(); 

// 

} 

@Entity 
public class Event { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy="event") 
    private Set<EventUser> eventUsers = new HashSet<>(); 

// 

} 

@Entity 
@Table(name = "Event_User") 
public class EventUser { 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    private long id; 

    private String reaction; 

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

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

// 

} 

をしかし、今...私は、ユーザーが具体的な電子メールを持っているすべてのイベントをロードする方法がわかりません。その前にメソッドを使用しました: findByUsersEmail(String email);

イベントには[ユーザーを設定]フィールドがないので、これを行うことはできません。

アイデア?

+0

1.テーブルの構造を変更する:ユーザー、イベント、反応、ユーザーイベントの反応 2. 'findByEmail'メソッドでクエリを変更する 3.イベントのみが必要な場合はどうすればいいですか?必要な理由 –

答えて

1

ここに必要なものはproperty-expressionsです。

だけで簡単にアイデアを開始するには、次の

findByEventUsers_UserEmail(String email); 

注:いけないメソッド名でクエリを作成することは非常に限られたアプローチであり、唯一の些細な例で使用されることを忘れては。それ以外の場合は、メソッドに対して@Query注釈を使用することを恐れたり、JPQL/Criteria APIを手動で記述したりしないでください。

関連する問題