У меня проблема с Hibernate - Envers. У меня есть объект домена только с одним проверенным атрибутом status
, который может быть одним из чисел 0,1,2,3,4,5.
@Entity
public class Item {
...
@Audited
private int status;
... other variables, setter/getter, ...
}
Теперь все в Envers и Hibernate работает. При создании нового объекта Item и добавлении его в базу данных строка вставляется в таблицу базы данных Item_AUD
.
Но теперь у меня проблема с его обновлением. Мое обновление в реализации Hibernate Dao выглядит так:
public void updateItem(Item i) {
SessionFactory sessionFac = HibernateUtility.getSessionFactory();
Session s = sessionFac.getCurrentSession();
Transaction trans = s.beginTransaction();
s.update(i);
s.flush();
trans.commit();
}
На каждом обновлении это напечатано на моей консоли:
Hibernate: update Item set amount=?, description=?, status=? where id=?
Hibernate: insert into REVINFO (REVTSTMP) values (?)
Hibernate: insert into Item_AUD (REVTYPE, status, id, REV) values (?, ?, ?, ?)
Но проблема в том, что я хочу вставить строку в REVINFO
и Item_AUD
, только если номер статуса изменился!
Например: я изменяю description
элемента, выполняю обновление, вызывая updateItem
, а затем Энверс записывает новую ревизию в таблицы аудита. Но я не хочу такого поведения.
Что я хочу: только если значение status
изменено, Envers должен записывать записи базы данных в таблицы аудита.
Но как я могу это сделать?
С наилучшими пожеланиями, Тим.