【发布时间】:2012-03-23 05:20:32
【问题描述】:
我想这仅与 Hibernate 相关(我现在才开始使用这两个框架)。我有一个跟踪用户会话的应用程序。当会话处于活动状态时,会话实体存储在活动会话的表中。当用户下线并且会话结束时,会话被移动到辅助历史表中。
如何使用 Hibernate 实现这一点?现在我有一个 Session.hbm.xml 文件,它将 Session 对象映射到活动会话表。我可以将它映射到辅助表并以某种方式指定我希望它在调用 saveOrUpdate 时保留到哪个表吗?
我的声誉目前不允许我这么快回答我自己的问题。不过,我不希望任何人为此浪费时间,因为我找到了答案,所以我将其发布在这里作为编辑。
我可以通过使用映射文件中的实体名称属性来做到这一点。我创建了第二个映射,与 Session.hbm.xml 相同,称为 HistoricalSession.hbm.xml。在这个新的映射文件中,我引用了相同的 Session 类,但添加了:
entity-name="HistoricalSession"
然后我像往常一样将对象映射到我的第二个(历史)表。调用 save() 或 saveOrUpdate() 默认使用类名作为实体名,并像以前一样保存在我的主表中。现在,当我想将会话保存到历史表时,我使用允许您指定实体名称的 Hibernate API 覆盖:
saveOrUpdate("HistoricalSession",session);
这正是我想要的,无需为历史会话创建另一个 Java 类
【问题讨论】:
-
我想过创建一个与 Session 具有相同属性但映射到历史表的 HistoricalSession 实体。在这种情况下,我将从正在关闭的 Session 创建一个 HistoricalSession,然后持久化 HistoricalSession。这可行,但需要创建一个新对象,这是我想避免的成本。
标签: java spring hibernate persistence