我正在嘗試獲取 UserAccount 不存在于管理員或關注者中的所有頻道(-> 不在 subscribedUsers 和管理員集合中)。
這些是我的物體:
public class UserAccount {
@Id ...
private long userId;
@JsonIgnore
@JoinTable(
name="user_channel_sub",
joinColumns = @JoinColumn(name
="user_channel_id",referencedColumnName="userId"),
inverseJoinColumns = @JoinColumn(name =
"channel_user_id",referencedColumnName = "channelId"))
@ManyToMany
private Collection<Channel> subChannel = new ArrayList<Channel>();
@JoinTable(
name="user_channel_admin",
joinColumns = @JoinColumn(name =
"user_channel_id",referencedColumnName= "userId"),
inverseJoinColumns = @JoinColumn(name =
"channel_user_id",referencedColumnName = "channelId"))
@ManyToMany
private Collection<Channel> adminChannel = new ArrayList<Channel>();
....
}
public class Channel {
@Id
private channelId;
@ManyToMany(mappedBy="adminChannel")
private Collection<UserAccount> admins = new ArrayList<UserAccount>();
@ManyToMany(mappedBy = "subChannel")
private Collection<UserAccount> subscribedUsers = new ArrayList<UserAccount>();
....
}
Repository 是一個 PagingAndSortingRespository。
我通過這種方法獲得了用戶是關注者或管理員的所有頻道(我真的不需要它,只是想確保至少有一些東西有效):
Collection<Channel> findBySubscribedUsers_UserName_OrAdmins_UserName(String uName1,String uName2);
現在,當我嘗試相反的情況時,我得到了重復的資料,而且基本上是錯誤的資料:
Collection <Channel> findBySubscribedUsersUserNameNotAndAdminsUserNameNot(String uName1,String uName2);
我究竟做錯了什么?是否可以使用這種方法,還是我需要使用更高級的 spring jpa 查詢方法?
uj5u.com熱心網友回復:
可以使用 JPA 參見檔案 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation
使用findDistinct方法和notContaining。
Collection<Channel> findDistinctByAdminsNotContainingAndSubscribedUsersNotContaining(UserAccount admin, UserAccount subscribedUser);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/419255.html
標籤:
