在Spring Data JPA查询中按子对象过滤时出错

我的代码结构如下所示。

文章:

@Entity

public class NewsArticle{

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Long id;

[Other class properties such as title, publisher, publishedDate, etc.]

@OneToMany(mappedBy = "article")

private Set<UserReadNewsArticle> userReadNewsArticles = new HashSet<>();

[Getters and Setters]

}

用户阅读的文章:

@Entity

public class UserReadNewsArticle {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Long id;

private Long readAccountId;

private Long readArticleId;

@JsonIgnore

@ManyToOne

private Account account;

@JsonIgnore

@ManyToOne

private NewsArticle article;

[Getters and Setters]

}

帐户:

@Entity

public class Account {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Long id;

[Other class properties]

@OneToMany(mappedBy = "account")

private Set<UserReadNewsArticle> userReadNewsArticles = new HashSet<>();

[Getters and Setters]

}

我想在NewsArticleRepository中使用一种查询方法来获取用户的所有阅读新闻文章。

public interface NewsArticleRepository extends PagingAndSortingRepository<NewsArticle, Long>{

Collection<NewsArticle> findByUserReadNewsArticlesReadAccountId(Long readAccountId);

}

这种方法效果很好。但是,我该如何编写Spring Data JPA查询/方法来获取“用户的未读新闻文章”。我尝试过以下。

Collection<NewsArticle> findByUserReadNewsArticlesReadAccountIdNot(Long readAccountId);

这确实返回了由其他用户阅读的文章列表。但是我的 。我已经阅读过Spring Data

JPA文档,但没有想到更轻松的方法。我该如何克服这个问题?还是我做错了什么?

回答:

您可以通过将JPQL查询和子查询一起使用来实现结果:

public interface NewsArticleRepository extends PagingAndSortingRepository<NewsArticle, Long> {

@Query("SELECT n FROM NewsArticle n WHERE n NOT IN "

+ "(SELECT ur.article FROM UserReadNewsArticle ur JOIN ur.account a WHERE a.id = :readAccountId)")

Collection<NewsArticle> findByUserReadNewsArticlesReadAccountIdNotIn(@Param("readAccountId") Long readAccountId);

}

http:// localhost:8080 / newsArticles / search /

findByUserReadNewsArticlesReadAccountIdNotIn?readAccountId =

1

因此,首先从当前用户那里获得已阅读的文章,然后将其从整个文章列表中排除。

我认为spring数据无法使您满意,因为绝对需要子查询。如果我错了,有人可以纠正我。

以上是 在Spring Data JPA查询中按子对象过滤时出错 的全部内容, 来源链接: utcz.com/qa/413470.html

回到顶部