gpt4 book ai didi

java - Spring多对多选择

转载 作者:行者123 更新时间:2023-11-29 18:54:25 25 4
gpt4 key购买 nike

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

最佳答案

好吧,我明白了。

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

我的主要问题当然是对 jpql 和 sql 的理解不好。
但这个想法在这里也“帮助”了我一点。没有安装 JPA 的facet,它只是不想使用speakerEvents.size,所以我认为它不受支持。更进一步,它试图获取数据库用户,而不是我的应用程序用户=>有更多错误。当我在调试中看到用户名“postgres”时,我终于明白那里发生了什么。

关于java - Spring多对多选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44217125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com