Hibernate Envers - 不为 createQuery(...).executeUpdate() 编写审计记录,只有 .persist() 和 .merge() [英] Hibernate Envers - Doesn't write audit records for createQuery(...).executeUpdate(), only .persist() and .merge()
问题描述
我有 3 种方式将东西写入数据库
I have 3 ways things get written to the DB
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()'
The problem I have, is in order to get the Hibernate Envers to actually write the audit records to the corrsponsing x_aud and revinfo DB tables. It only works successfully for '.persist()' or '.merge()'. I cannot get it to work for 'createQuery(...).executeUpdate()'
我是不是遗漏了什么,或者它只是不适合这个.问题是,我的很多代码都是使用 .executeUpdate 而不是 merge 编写的,所以我真的需要它来处理现有代码.
Am I missing something or does it just not work for this. The problem is, a lot of my code has been written using .executeUpdate and not merge, so really I need this to work with the existing code.
有人可以帮忙吗?
推荐答案
看起来 Avinash T. 是对的 - 如果你想创建原生 SQL 查询,使用 createNativeQuery(String sqlString)
EntityManager
的方法.只有在使用 EJB QL 时才可以使用 createQuery(String ejbqlString)
.希望它会有所帮助.
It looks like Avinash T. is right - if you want to create native SQL query, use createNativeQuery(String sqlString)
method of EntityManager
. Using createQuery(String ejbqlString)
is only possible if you're using EJB QL. Hope it would help.
这篇关于Hibernate Envers - 不为 createQuery(...).executeUpdate() 编写审计记录,只有 .persist() 和 .merge()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!