@ManyToMany有额外的列 - 如何通过Spring Data加载?

时间:2017-07-26 10:13:06

标签: spring hibernate many-to-many spring-data-jpa

我在用户和事件之间有很多关系。我需要在关系表中有额外的列。我做了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字段。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要的是property-expressions

快速入门:

findByEventUsers_UserEmail(String email);

注意:不要忘记按方法名称创建查询是一种非常有限的方法,只能用于普通情况。在任何其他情况下,不要害怕在方法上使用@Query注释或手动编写JPQL / Criteria API。