JPQL复杂一对多join查询结果
JPQL complex One to Many join query result
我有两个简单的 DTO,
class Post{
@Id
private int postId;
private String text;
@OneToMany(mappedBy = "post")
private List<Comment> comments = new ArrayList<Comment>();
}
class Comment{
@Id
private int commentId;
private int userId;
private into text;
@ManyToOne
@JoinColumn(name = "postId")
private Post post;
}
- 一个post可以有多个不同用户的评论
- 一个post也可以有同一个用户的多个评论
现在,我想使用 JPQL 查找所有 post 以及用户评论,其中 post 包含给定用户的评论。
所以,基本上我想要一个 'Post' 对象的列表以及封装在每个 post 中的限定注释。
示例 SQL 可能如下所示:
select *
from post p
inner join comment c
on p.post_id = c.post_id
where c.user_id = {given user id}
public interface PostRepository extends CrudRepository<Integer, Post> {
@Query("select p from Post p inner join p.comments c where c.userId =:userId")
List<Post> findByCommentsUserId(@Param("userId") Integer userId);
}
Set<Post> posts = new HashSet<>(findByCommentsUserId("anyUserId"));
我写了这段代码但没有执行它所以它是伪代码但它会很相似
我有两个简单的 DTO,
class Post{
@Id
private int postId;
private String text;
@OneToMany(mappedBy = "post")
private List<Comment> comments = new ArrayList<Comment>();
}
class Comment{
@Id
private int commentId;
private int userId;
private into text;
@ManyToOne
@JoinColumn(name = "postId")
private Post post;
}
- 一个post可以有多个不同用户的评论
- 一个post也可以有同一个用户的多个评论
现在,我想使用 JPQL 查找所有 post 以及用户评论,其中 post 包含给定用户的评论。
所以,基本上我想要一个 'Post' 对象的列表以及封装在每个 post 中的限定注释。
示例 SQL 可能如下所示:
select *
from post p
inner join comment c
on p.post_id = c.post_id
where c.user_id = {given user id}
public interface PostRepository extends CrudRepository<Integer, Post> {
@Query("select p from Post p inner join p.comments c where c.userId =:userId")
List<Post> findByCommentsUserId(@Param("userId") Integer userId);
}
Set<Post> posts = new HashSet<>(findByCommentsUserId("anyUserId"));
我写了这段代码但没有执行它所以它是伪代码但它会很相似