2017-07-26 61 views
1

我有許多關於用戶和事件之間的關係。我需要在關係表中有額外的列。我沒有id:@ManyToMany帶額外的列 - 如何通過彈簧數據加載?

@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);

現在我不能這樣做,因爲Event沒有Set users字段。

任何想法?

+0

1.更改表格的結構:用戶,事件,反應,用戶事件響應 2.在'findByEmail'方法中更改查詢方法 3.如果您只需要事件而不需要「@ JoinTable」需要理由 –

回答

1

這裏您需要的是property-expressions

只是快速的想法開始:

findByEventUsers_UserEmail(String email); 

注:不要忘記,方法名創建查詢是非常有限的方法,並且只通過瑣碎的情況下使用。在任何其他情況下,不要害怕在方法上使用@Query批註或手動編寫JPQL/Criteria API。