我认为这仅适用于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类
答案 0 :(得分:5)
我可以通过在映射文件中使用entity-name属性来完成此操作。我创建了第二个映射,与Session.hbm.xml相同,名为HistoricalSession.hbm.xml。在这个新的映射文件中,我引用了相同的Session类,但添加:
entity-name="HistoricalSession"
然后我像往常一样将对象映射到我的第二个(历史)表。调用save()或saveOrUpdate()默认使用classname作为实体名称,并像以前一样保存在我的主表中。现在,当我想将会话保存到历史表时,我使用允许您指定实体名称的Hibernate API覆盖:
saveOrUpdate("HistoricalSession",session);
这完全符合我的要求,无需为历史会话创建另一个Java类
答案 1 :(得分:1)
有两种方法可以:
答案 2 :(得分:0)
您的需求听起来更像是审计。 检查项目Hibernate Envers它可能有助于更好地解决您的问题。