每当更新或保留某种类型的新实体时,我都想保存一个额外的实体。我知道 Envers 并且不想使用它,因为我有一个稍微其他的用例,具体来说:时间序列。因为在这种情况下性能很重要,所以我想实现一个真正满足我要求的解决方案。我知道 Hibernate 拦截器(例如扩展 EmptyInterceptor 并覆盖所需的方法,如 onFlushDirty)及其事件 API(例如 PostInsertEventListener、FlushEventListener 等)。
在第一种情况下,我还没有找到如何在拦截器中获取 SessionFactory,我将使用它打开一个新的临时会话(与当前会话的连接)以保存我的自定义时间序列实体。
使用事件 api 的方法似乎更加灵活和强大,并且通过事件获取会话非常容易。但是,据我所知,我必须在那里构建具有所有属性的地图(至少这是我在使用这种方法的 envers 代码中看到的),所以似乎还有更多工作要做。
那么使用 JPA 或 Hibernate 保存另一个实体的最简单方法是什么?我是在寻找正确的方向,还是有其他(更好或更容易)的方法来处理我迄今为止忽略的这个问题?上述方法是否有已知的警告?
更新:为了更清楚,我想保存另一个实体,但不是同一类型。要保存的实体是一个非常简单的对象,它只保存两个日期,一个对原始实体的引用,以及它的一个感兴趣的属性的值。