Spring 如何从@many-to-many-created基地获取用户

Spring 如何从@many-to-many-created基地获取用户,spring,spring-data-jpa,Spring,Spring Data Jpa,我创建了两个类User和Events。它们与多对多注释相关联。我需要找到如何从一个事件获取所有用户,或者如何从一个用户获取所有事件的一些变体 我试图找到一些指南,但没有找到 用户类 @Entity @Table(name = "usr") public class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", up

我创建了两个类User和Events。它们与多对多注释相关联。我需要找到如何从一个事件获取所有用户,或者如何从一个用户获取所有事件的一些变体

我试图找到一些指南,但没有找到

用户类

@Entity
@Table(name = "usr")
public class User implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @NotNull
    @Column(nullable = false, length = 40)
    private String username;

    @NotNull
    @Column(nullable = false, length = 60)
    private String password;

    private boolean active;

    @ElementCollection(targetClass = Role.class , fetch = FetchType.EAGER)
    @CollectionTable(name = "user_role" , joinColumns = @JoinColumn(name = "user_id"))
    @Enumerated(EnumType.STRING)
    private Set<Role> roles;

    @ManyToMany
    @JoinTable (name="user_event",
            joinColumns=@JoinColumn (name="user_id"),
            inverseJoinColumns=@JoinColumn(name="event_id"))
    private List<Events> events;

}
@实体
@表(name=“usr”)
公共类用户实现UserDetails{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”,updateable=false,nullable=false)
私人长id;
@NotNull
@列(nullable=false,长度=40)
私有字符串用户名;
@NotNull
@列(nullable=false,长度=60)
私有字符串密码;
私有布尔活动;
@ElementCollection(targetClass=Role.class,fetch=FetchType.EAGER)
@CollectionTable(name=“user\u role”,joinColumns=@JoinColumn(name=“user\u id”))
@枚举(EnumType.STRING)
私人设定角色;
@许多
@JoinTable(name=“user\u事件”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“event\u id”))
私人列表活动;
}
事件类

@Entity
@Table(name = "events")
public class Events {

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

    @Column(nullable = false, length = 40)
    private String place;

    @Column(nullable = false, length = 40)
    private String title;

    @Column(nullable = false, length = 2048)
    private String text;

    @Basic
    @Temporal(TemporalType.DATE)
    @Column(name = "dateStart")
    private java.util.Date dateStart;

    @Basic
    @Temporal(TemporalType.DATE)
    @Column(name = "dateEnd")
    private java.util.Date dateEnd;

    @ManyToMany
    @JoinTable(name="student_university",
            joinColumns=@JoinColumn(name="event_id"),
            inverseJoinColumns=@JoinColumn(name="user_id"))
    private List<User> universities;

}
@实体
@表(name=“events”)
公开课活动{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@列(nullable=false,长度=40)
私人弦乐场;
@列(nullable=false,长度=40)
私有字符串标题;
@列(nullable=false,长度=2048)
私有字符串文本;
@基本的
@时态(TemporalType.DATE)
@列(name=“dateStart”)
private java.util.Date dateStart;
@基本的
@时态(TemporalType.DATE)
@列(name=“dateEnd”)
私有java.util.Date-dateEnd;
@许多
@JoinTable(name=“学生大学”,
joinColumns=@JoinColumn(name=“event_id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”))
私立大学名单;
}
现在呢。。。我需要的东西应该给我的事件由用户id或用户由事件id在控制器。我不知道怎么做。

公共界面用户存储库扩展了JpaRepository{
public interface UserRepository extends JpaRepository<User, Long> {
  List<User> findAllByEventsId(Long id)
}

public interface EventRepository extends JpaRepository<Event, Long> {
  List<Event> findAllByUniversitiesId(Long id)
}
列表findAllByEventsId(长id) } 公共接口事件存储库扩展了JpaRepository{ 列表FindAllByVersionId(长id) }
然后在控制器中使用这些存储库方法。

您可以加入表

public class User {
    @ManyToMany
    @JoinTable(name = "a_user_event",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id"))
    private List<Events> events;
}

public class Events {
    @ManyToMany(mappedBy = "events")
    private List<User> users;
}
公共类用户{
@许多
@JoinTable(name=“a\u user\u事件”,
joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“event\u id”,referencedColumnName=“id”))
私人列表活动;
}
公开课活动{
@许多(mappedBy=“事件”)
私人名单用户;
}
在您的存储库中

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u inner join u.events e WHERE e.id = ?1")
    public List<User> findUsersByEventId(long eventId);
}

public interface EventRepository extends JpaRepository<Events, Long> {
    @Query("SELECT e FROM User u inner join u.events e WHERE u.id = ?1")
    public List<Events> findEventsByUserId(long userId);
}
public interface UserRepository扩展了JpaRepository{
@查询(“从用户u内部连接u.e中选择u,其中e.id=?1”)
公共列表FindUserByEventId(长eventId);
}
公共接口事件存储库扩展了JpaRepository{
@查询(“从用户u内部连接u.e中选择e,其中u.id=?1”)
公共列表findEventsByUserId(长用户标识);
}