Hibernate - Envers -> аудит / управление версиями атрибута, но только если значение изменилось

У меня проблема с 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 , если номер статуса изменился!

Например: я меняю описание элемента, выполните обновление, вызвав updateItem , а затем Envers запишет новую версию в таблицы аудита. Но я не хочу такого поведения.

Чего я хочу: только если значение status изменится, Envers должен будет записывать записи базы данных в таблицы аудита.

Но как я могу это сделать?

С уважением, Тим.

5
задан skaffman 15 March 2011 в 11:13
поделиться