春天多选多少

时间:2017-05-27 12:55:59

标签: java mysql sql spring spring-data-jpa

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

1 个答案:

答案 0 :(得分:0)

好的,我明白了。

@Query("select u from User u where u.speakerEvents.size <> 0")

我的主要问题是对jpql和sql的理解也很糟糕。
但是这个想法在这里“帮助了我”。 JPA没有安装facet,它只是不想使用speakerEvents.size,所以我觉得它不受支持。而且,它试图采用数据库用户,而不是我的应用程序用户=&gt;有更多的错误。当我在调试中看到userName“postgres”时,我终于明白了那里发生了什么。