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;
}
我想选择所有发言人=&gt;我需要所有使用spekaerEvents的用户都不为空。
我正在使用Spring Data,并尝试使用方法使用存储库,但它无法正常工作。
它返回所有扬声器,但扬声器重复(因此User1将是5次,User2等5次)
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
答案 0 :(得分:0)
好的,我明白了。
@Query("select u from User u where u.speakerEvents.size <> 0")
我的主要问题是对jpql和sql的理解也很糟糕。
但是这个想法在这里“帮助了我”。 JPA没有安装facet,它只是不想使用speakerEvents.size,所以我觉得它不受支持。而且,它试图采用数据库用户,而不是我的应用程序用户=&gt;有更多的错误。当我在调试中看到userName“postgres”时,我终于明白了那里发生了什么。