【问题标题】:Hibernate Envers - Doesn't write audit records for createQuery(...).executeUpdate(), only .persist() and .merge()Hibernate Envers - 不为 createQuery(...).executeUpdate() 编写审计记录,只为 .persist() 和 .merge() 编写审计记录
【发布时间】:2013-01-03 13:27:10
【问题描述】:

我有 3 种方式将内容写入数据库

public void create(T object) {
    entityManager.persist(object);
}

public void update(T object) {
    object = entityManager.merge(object);
}

public int updateStatus(String id, String status) {

    final int changes =
                entityManager.createQuery("update item set state = :newState," +
                        " last_modified = current_timestamp" +
                        " where id = : id ")
                    .setParameter("newState", status)
                    .setParameter("id", id)
                    .executeUpdate();

            return changes;
}

我遇到的问题是为了让 Hibernate Envers 将审计记录实际写入相应的 x_aud 和 revinfo DB 表。它仅适用于 '.persist()' 或 '.merge()'。我无法让它为 'createQuery(...).executeUpdate()'

工作

我是否遗漏了什么,或者它只是不适合这个。问题是,我的很多代码都是使用 .executeUpdate 而不是合并编写的,所以我真的需要它来处理现有代码。

有人可以帮忙吗?

【问题讨论】:

  • 是SQL查询还是HQL查询?

标签: java spring hibernate jboss hibernate-envers


【解决方案1】:

不,如果您使用 executeUpdate,Envers 将无法工作。那是因为更新没有经过Hibernate的事件机制,所以Envers没有机会拦截到变化,写审计。

【讨论】:

  • 如果我写一个 Spring data jpa 查询进行更新,是否能够拦截它?
【解决方案2】:

看起来 Avinash T. 是对的 - 如果您想创建原生 SQL 查询,请使用 EntityManagercreateNativeQuery(String sqlString) 方法。只有在使用 EJB QL 时才能使用 createQuery(String ejbqlString)。希望它会有所帮助。

【讨论】:

  • 我没有使用原生 sql 查询,而是仅使用 HQL。但是对 .executeUpdate() 的审核不起作用。你有什么办法做到这一点。
【解决方案3】:

试试这个 -

    public int updateStatus(String id, String status) {

    final int changes =
                entityManager.createQuery("Update Item set state = :newState," +
                        " lastModified = CURRENT_TIMESTAMP" +
                        " where id = : id ")
                    .setParameter("newState", status)
                    .setParameter("id", id)
                    .executeUpdate();

            return changes;
}

以下链接将帮助您了解有关 JPQL 的更多信息 -

http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 2023-03-24
    • 2012-12-19
    • 2015-12-14
    • 1970-01-01
    • 2017-02-26
    • 2013-10-25
    • 2013-06-28
    • 2015-08-20
    相关资源
    最近更新 更多