У меня проблема с Hibernate Envers. Как я могу передать пользовательские поля в RevisionListener? Например:
У меня есть объект с аннотацией @Audit, и все работает нормально. Но я понятия не имею, как я могу передать пользовательские поля, такие как «комментарий».
@Entity
@Table(name = "REVINFO")
@RevisionEntity(MyRevisionEntityListener.class)
public class RevEntity {
@Id
@RevisionNumber
@Column(name = "REV", nullable = false, updatable = false)
private Integer id;
@RevisionTimestamp
@Column(name = "REVTSTMP", nullable = false, updatable = false)
private Date timestamp;
@Column(name = "MODIFIED_BY", length = 100)
private String modifiedBy;
@Column(name = "COMMENT", length = 100)
private String comment;
public class MyRevisionEntityListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
RevEntity a = (RevEntity) revisionEntity;
a.setComment("");//how can i populate it?
}
}
Итак, как я могу установить поле комментария?
Редактировать ---------
Я нашел какой-то трюк с ThreadLocal - но это безопасно с несколькими "активными пользователями"?
Например:
public class CustomComment {
public static final CustomComment INSTANCE = new CustomComment();
private static final ThreadLocal<String> storage = new ThreadLocal<>();
public void setComment(String comment) {
storage.set(comment);
}
public String get() {
return storage.get();
}
}
И у меня есть Служба, которая изменяет сущность:
CustomComment.INSTANCE.setComment("custom comment");
someRepository.save(someEntity);
Чем все работает, как я хочу. Но безопасно ли это решение? Если 2 или более чел. «Поменяют» разные сущности, будет ли это хорошо работать?