Java 在JPA/Hibernate中实现喜欢/不喜欢状态检索的最有效方法?
我目前正在实现一个带有类似按钮的文档,如下所示: like按钮与某个用户帐户相关联。当你按下“喜欢”按钮时,该用户会一直喜欢它(类似于youtube视频) 我的实体和DTO如下所示: Doc.java:Java 在JPA/Hibernate中实现喜欢/不喜欢状态检索的最有效方法?,java,spring,postgresql,hibernate,jpa,Java,Spring,Postgresql,Hibernate,Jpa,我目前正在实现一个带有类似按钮的文档,如下所示: like按钮与某个用户帐户相关联。当你按下“喜欢”按钮时,该用户会一直喜欢它(类似于youtube视频) 我的实体和DTO如下所示: Doc.java: @Entity(name = "Doc") @Table(name = "doc") @Data public class Doc { //Unrelated code reacted for clarity @ManyToMany(casc
@Entity(name = "Doc")
@Table(name = "doc")
@Data
public class Doc {
//Unrelated code reacted for clarity
@ManyToMany(cascade = {
CascadeType.MERGE,
CascadeType.PERSIST
})
@JoinTable(
name = "doc_user_dislike",
joinColumns = @JoinColumn(name = "doc_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private Set<UserWebsite> dislikedUsers;
@ManyToMany(cascade = {
CascadeType.MERGE,
CascadeType.PERSIST
})
@JoinTable(
name = "doc_user_like",
joinColumns = @JoinColumn(name = "doc_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private Set<UserWebsite> likedUsers;
}
我有一些解决方案:
@Formula
,也会导致N+1问题(每个文档都有额外的查询)。此外,您还可以使用托管实体,这意味着最后需要进行额外的脏检查
@Entity
@Table(name = "user_website")
@Data
public class UserWebsite {
//Unrelated code reacted for clarity
@ManyToMany(mappedBy = "likedUsers")
private Set<Doc> likedDocs;
@ManyToMany(mappedBy = "dislikedUsers")
private Set<Doc> dislikedDocs;
}
@Data
public class DocDetailsDTO {
private Long id;
private Boolean isDisliked;
private Boolean isLiked;
}