一尘不染

Hibernate Envers-不写createQuery(…).executeUpdate()的审核记录,仅写.persist()和.merge()

hibernate

我有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编写的而不是合并的,所以我真的需要使用它来处理现有代码。

有人可以帮忙吗?


阅读 230

收藏
2020-06-20

共1个答案

一尘不染

看起来 Avinash T. 是正确的-如果要创建本机SQL查询,请使用的createNativeQuery(String sqlString)方法EntityManager。使用createQuery(String ejbqlString)如果您正在使用EJB
QL是唯一可能的。希望这会有所帮助。

2020-06-20