我遇到了有关休眠注释映射配置的问题。想象一下社交媒体平台上的以下两个课程:
@Entity
class User {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany
private List<Post> posts; //lazy-loaded, because of big amounts
}
@Entity
class Post {
@Id
@GeneratedValue
private Long id;
//large amounts of data
private String text;
private Date date;
@ManyToOne
private User author;
}
我的用例中最有趣的信息是每个用户最近写的帖子。我可以读入用户并附加一个自定义查询,如下所示:
SELECT mx.userId,text,mx.date FROM
(SELECT user.id AS userId,max(date) AS date
FROM post,user
WHERE post.author=user.id
GROUP BY user.id) mx,
Post p
WHERE p.author=mx.userId
AND p.date=mx.date;
我现在的问题是,如何将最新帖子作为字段嵌入其映射用户中。
新用户:
@Entity
class User {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany
private List<Post> posts;
//@Filter?
//@Query?
private Post latestPost;
}
我不想将我的“最新发布”聚合中的数据与我在 Java 中的用户对象连接起来。这味道不对。所以我正在寻找一种解决方案,将这个聚合字段嵌入到我的基础实体中。我在哪里可以在 Hibernate 中指定自定义检索用户对象以添加这样的聚合字段?
您可以想象一个类似的问题,例如在 CRM 中嵌入特定客户的交易金额总和。
我希望,我可以说明我的想法和问题。提前致谢!