我有關於hibernate註釋映射配置的問題。想象一下,在一個社交媒體平臺,以下兩類:休眠 - 在實體中嵌入聚合列
@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中我的用戶對象的最新-post'聚集加入數據。這味道不對。所以我正在尋找一個解決方案來將這個聚合字段嵌入到我的基礎實體中。我在哪裏可以指定在Hibernate中的用戶對象的自定義檢索來添加這樣的聚合字段?
你可以想象一個類似的問題,例如,在CRM中嵌入特定客戶的交易金額。
我希望我能說明我的想法和問題。提前致謝!
是否有可能創建一個子選擇並加入@ Where子句?如何?這是一個好主意嗎? –
我認爲這是可能的 - 請參閱我的答案。我沒有測試這個查詢 - 可能有一些「微調」是必要的...... –