【发布时间】:2017-05-27 12:55:59
【问题描述】:
public class User {
@ManyToMany(mappedBy = "speakers")
private List<Event> speakerEvents;
}
public class Event {
@ManyToMany
@JoinTable(name = "user_speaker_event",
joinColumns = {@JoinColumn(name = "event_id")},
inverseJoinColumns = {@JoinColumn(name = "calendar_user_id")})
private List<User> speakers;
}
我想选择所有发言者 => 我需要所有用户的 spekaerEvents 不为空。
我正在使用 Spring Data,并尝试使用方法来用户存储库,但它不起作用。
它返回所有扬声器,但扬声器重复(因此会有 5 次 User1,5 次 User2 等)
public interface UserRepository extends JpaRepository<User, Long> {
List<User> getBySpeakerEventsIsNotNull();
}
我知道我可以使用@Query 注释来选择需要的用户,但我无法弄清楚(查询本身)。
我有类似的东西,但它的工作方式相同。我觉得我需要在某处添加 DISTINCT,但不知道如何。
SELECT *
FROM public.calendar_users
INNER JOIN user_speaker_event ON calendar_users.id = user_speaker_event.calendar_user_id
【问题讨论】:
-
1.意识到 Query 需要 JPQL 而不是 SQL 查询。 2.意识到JPQL和JPQL不是一回事,值得学习,就像你曾经学过SQL一样。 3. 打开hibernate手册,在文档中查找JPQL章节(阅读整本手册也可以)。 4. 阅读本章,如果需要,读两遍或三次。 5. 您现在应该至少可以尝试 JPQL 查询,选择不同的用户。请注意,顺便说一句,任何演讲者都不会拥有空的事件集合。集合可能为空,但不为空。
标签: java mysql sql spring spring-data-jpa