我有3个实体(用户,帖子,评论):
@Entity
public class User {
@Id private Long id;
@OneToMany private Set<Post> posts;
...
}
@Entity
public class Post {
@Id private Long id;
@ManyToOne private User user;
@OneToMany private Set<Comment> comments;
...
}
@Entity
public class Comment {
@Id private Long id;
@ManyToOne private Post post;
...
}
现在我只能选择有帖子的用户:
List<User> users = query.from(qUser)
.leftJoin(qUser.posts, qPost)
.transform(groupBy(qUser.id).list(
Projections.bean(User.class, qUser.id, ..., set(
Projections.bean(Post.class, qPost.id, ...)
).as(qUser.posts))
));
但我需要在一个查询中选择包含帖子和评论的用户,例如:
List<User> users = query.from(qUser)
.leftJoin(qUser.posts, qPost)
.leftJoin(qPost.comments, qComment)
.transform(groupBy(qUser.id).list(
Projections.bean(User.class, qUser.id, ..., set(
Projections.bean(Post.class, qPost.id, ...,
set(Comment.class, qComment.id, ...).as(qPost,comments)
)
).as(qUser.posts))
));
我该怎么做?
答案 0 :(得分:1)
您的评论需要第三次投影。
List<User> users = query.from(qUser)
.leftJoin(qUser.posts, qPost)
.leftJoin(qPost.comments, qComment)
.transform(groupBy(qUser.id).list(
Projections.bean(User.class, qUser.id, ...,
set(Projections.bean(Post.class, qPost.id, ...,
set(Projections.bean(Comment.class, qComment.id, ...).as("comments")
).as("posts")
)
);