![](/img/trans.png)
[英]How to persist self-referencing entity using two tables in Hibernate?
[英]How to persist entity to two different tables using Spring+Hibernate
我想這只適用於Hibernate(我現在才開始使用這兩個框架)。 我有一個跟蹤用戶會話的應用程序。 會話處於活動狀態時,會話實體存儲在活動會話的表中。 當用戶離線並且會話結束時,會話將移至輔助歷史表。
如何使用Hibernate實現這一目標? 現在我有一個Session.hbm.xml文件,它將Session對象映射到活動會話表。 我可以將它映射到輔助表,並以某種方式指定在調用saveOrUpdate時我希望它保留在哪個表中嗎?
我目前的聲譽不允許我快速回答我自己的問題。 我不希望任何人浪費時間在這上面,因為我找到了答案,所以我在這里作為編輯發布。
我可以通過在映射文件中使用entity-name屬性來完成此操作。 我創建了第二個映射,與Session.hbm.xml相同,名為HistoricalSession.hbm.xml。 在這個新的映射文件中,我引用了相同的Session類,但是添加:
entity-name="HistoricalSession"
然后我像往常一樣將對象映射到我的第二個(歷史)表。 調用save()或saveOrUpdate()默認使用classname作為實體名稱,並像以前一樣保存在我的主表中。 現在,當我想將會話保存到歷史表時,我使用允許您指定實體名稱的Hibernate API覆蓋:
saveOrUpdate("HistoricalSession",session);
這完全符合我的要求,而無需為歷史會話創建另一個Java類
我可以通過在映射文件中使用entity-name屬性來完成此操作。 我創建了第二個映射,與Session.hbm.xml相同,名為HistoricalSession.hbm.xml。 在這個新的映射文件中,我引用了相同的Session類,但是添加:
entity-name="HistoricalSession"
然后我像往常一樣將對象映射到我的第二個(歷史)表。 調用save()或saveOrUpdate()默認使用classname作為實體名稱,並像以前一樣保存在我的主表中。 現在,當我想將會話保存到歷史表時,我使用允許您指定實體名稱的Hibernate API覆蓋:
saveOrUpdate("HistoricalSession",session);
這完全符合我的要求,而無需為歷史會話創建另一個Java類
有兩種方法可以:
你的需求聽起來更像是審計。 檢查項目Hibernate Envers它可能有助於以更好的方式解決您的案例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.