【问题标题】:JPA: Store last update time in a separate tableJPA:将上次更新时间存储在单独的表中
【发布时间】:2012-09-03 15:33:03
【问题描述】:

我正在使用 jpa 和 hibernate,我正在尝试存储 JPA 管理的每个项目的创建/更新/删除时间。

我需要像 Hibernate Envers 这样的东西,但只存储最后一次,而不是所有修订,我想将该数据存储在单独的表中(因为这些数据不是项目本身的一部分,而是属于可选同步需要知道每个项目的最后修改时间的进程)。

现在我可以使用 jpa @EntityListeners 捕获所有事件,但现在我不知道如何将这些信息保存到数据库表中。 我不想定义 item_history 表实体,而是像 envers 那样在运行时生成和访问它们。

这可能吗?

【问题讨论】:

    标签: java hibernate jpa hibernate-envers


    【解决方案1】:

    您可以使用 Hibernate 拦截器来捕获实体上的 DML 操作,并将您需要的数据存储在单独的表中。

    Check this example

    如果您不想映射新实体来存储历史记录,请执行本机 SQL 来复制数据或调用 PL/SQL 过程。一个例子:

    Table table = Entity.class.getAnnotation(Table.class);
    String tableName = table.name();
    Query query = session.createQuery("insert into " + table + "_HIST" +
                "SELECT * FROM " + table ;
    int result = query.executeUpdate();
    

    【讨论】:

    • 正如我所说:我可以使用 jpa @EntityListeners 捕获所有事件。问题是:不想定义 item_history 表实体
    猜你喜欢
    • 2010-12-17
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2018-10-16
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多