Как добавить комментарий к объекту ревизии?

Я хочу добавить комментарий к своей ревизии, но не знаю, как это сделать, потому что не знаю, как передать данные ни в RevisionListener, ни в EntityTrackingRevisionListener.

Моя сущность ревизии выглядит так:

@Entity
@RevisionEntity
public class RevisionWithComment extends DefaultRevisionEntity {

 private String comment;

/*Normal Hibernate stuff for defining 'comment' as column goes here.*/ 
}

У меня также есть объект Foo и запрос, который изменяет некоторые файлы foos. Я хотел бы иметь возможность добавлять произвольные комментарии к новым версиям:

public class FooService {

   public void updateFoo( DataForUpdate dataForUpdate, String reasonForChange) {
    //First select and update some foos
    //Now add comment to the new revisions - but how do I do that?
   }

}

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


person Paperback Writer    schedule 14.03.2014    source источник


Ответы (2)


Я бы использовал переменную ThreadLocal для хранения комментария. метод updateFoo установит его, а класс RevisionWithComment получит значение и скопирует его текущее значение в сущность.

person user3360944    schedule 14.03.2014
comment
Я думал об этом решении, но оно довольно уродливо. Кроме того, я не уверен, сработает ли это в случае обновления многих сущностей. - person Paperback Writer; 15.03.2014
comment
Прослушиватель ревизий — это объект, управляемый спящим режимом, поэтому обычно вам нужно выполнить статический поиск или использовать локальный поток для передачи данных. Если за одну транзакцию обновляется много сущностей, это должно происходить в одном потоке, поэтому такой подход будет работать. - person adamw; 15.03.2014

Вы можете достичь этого с помощью Введения в АОП. Таким образом, вы можете добавить поле комментария через введение. Подробнее об АОП можно прочитать в официальной документации Spring: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html

person Oriaxx    schedule 10.11.2015