我在用户和事件之间有很多关系。我需要在关系表中有额外的列。我做了id:
@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)
您需要的是property-expressions。
快速入门:
findByEventUsers_UserEmail(String email);
注意:不要忘记按方法名称创建查询是一种非常有限的方法,只能用于普通情况。在任何其他情况下,不要害怕在方法上使用@Query
注释或手动编写JPQL / Criteria API。