Hibernate Envers - 不为createQuery(...).executeUpdate()编写审计记录,只编写.persist()和.merge()

bab*_*abb 4 java jboss spring hibernate hibernate-envers

我有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;
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是为了让Hibernate Envers实际将审计记录写入相应的x_aud和revinfo数据库表.它只适用于'.persist()'或'.merge()'.我不能让它为'createQuery(...). executeUpdate() '工作

我是否遗漏了某些东西,或者只是为此而努力.问题是,我的很多代码都使用.executeUpdate编写而不是合并,所以我真的需要这个来处理现有的代码.

有人可以帮忙吗?

ada*_*amw 8

不,如果您使用的是executeUpdate,Envers将无效.这是因为更新没有通过Hibernate的事件机制,因此Envers没有机会拦截更改,并编写审计.


bsi*_*nau 3

看起来Avinash T.是对的 - 如果您想创建本机 SQL 查询,请createNativeQuery(String sqlString)使用EntityManager. createQuery(String ejbqlString)仅当您使用 EJB QL 时才可以使用。希望它会有所帮助。