在我的Spring Boot项目中,我定义了一个聊天和用户实体,它们之间是多对多关系。
Chat.java
@ManyToMany
@JoinTable(name = "chat_user",
joinColumns = @JoinColumn(name = "chat_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
private Set<User> users = new HashSet<User>();
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
User.java
@ManyToMany
@JsonBackReference
@JoinTable(name = "chat_user",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "chat_id", referencedColumnName = "id"))
private Set<Chat> chats = new HashSet<Chat>();
public Set<Chat> getChats() {
return chats;
}
public void setChats(Set<Chat> chats) {
this.chats = chats;
}
如何在CrudRepository中编写一个方法,以便我获得包含用户列表中所有用户的聊天列表。
到目前为止,我已经编写了一个返回包含用户列表中任何用户的聊天列表的方法。
public interface ChatRepo extends CrudRepository<Chat, Long> {
List<Chat> findAllByUsers(User user);
List<Chat> findDistinctByUsersIn(Set<User> users);
}
containsAll()
方法之一。优化的一种方式是在查询中执行此操作。可能有一些HQL函数可以实现这个(我记不清了),但是一个快速的查询得出了这个结果:https://dev59.com/mGnWa4cB1Zd3GeqPzVak - Thomasequals/hashCode
? 否则,containsAll
方法将无法正常工作。 - Malte Hartwig