如何使用Spring + Hibernate将实体持久化到两个不同的表

tdi*_*mig 3 java spring persistence hibernate

我想这只适用于Hibernate(我现在才开始使用这两个框架).我有一个跟踪用户会话的应用程序.会话处于活动状态时,会话实体存储在活动会话的表中.当用户离线并且会话结束时,会话将移至辅助历史表.

如何使用Hibernate实现这一目标?现在我有一个Session.hbm.xml文件,它将Session对象映射到活动会话表.我可以将它映射到辅助表,并以某种方式指定在调用saveOrUpdate时我希望它保留在哪个表中吗?

我目前的声誉不允许我快速回答我自己的问题.我不希望任何人浪费时间在这上面,因为我找到了答案,所以我在这里作为编辑发布.

我可以通过在映射文件中使用entity-name属性来完成此操作.我创建了第二个映射,与Session.hbm.xml相同,名为HistoricalSession.hbm.xml.在这个新的映射文件中,我引用了相同的Session类,但是添加:

entity-name="HistoricalSession"
Run Code Online (Sandbox Code Playgroud)

然后我像往常一样将对象映射到我的第二个(历史)表.调用save()或saveOrUpdate()默认使用classname作为实体名称,并像以前一样保存在我的主表中.现在,当我想将会话保存到历史表时,我使用允许您指定实体名称的Hibernate API覆盖:

saveOrUpdate("HistoricalSession",session);
Run Code Online (Sandbox Code Playgroud)

这完全符合我的要求,而无需为历史会话创建另一个Java类

tdi*_*mig 5

我可以通过在映射文件中使用entity-name属性来完成此操作.我创建了第二个映射,与Session.hbm.xml相同,名为HistoricalSession.hbm.xml.在这个新的映射文件中,我引用了相同的Session类,但是添加:

entity-name="HistoricalSession"
Run Code Online (Sandbox Code Playgroud)

然后我像往常一样将对象映射到我的第二个(历史)表.调用save()或saveOrUpdate()默认使用classname作为实体名称,并像以前一样保存在我的主表中.现在,当我想将会话保存到历史表时,我使用允许您指定实体名称的Hibernate API覆盖:

saveOrUpdate("HistoricalSession",session);
Run Code Online (Sandbox Code Playgroud)

这完全符合我的要求,而无需为历史会话创建另一个Java类