Hibernate envers: как получить имя текущей проверяемой таблицы?

Можно ли получить текущую проверенную таблицу с помощью Hibernate Envers? Я взял пример из doc, но добавил дополнительный столбец tableName:

@Entity
@RevisionEntity(ExampleListener.class)
public class ExampleRevEntity extends DefaultRevisionEntity {
    private String username;
    private tableName;
    ...
}

И слушатель:

public class ExampleListener implements RevisionListener {

    public void newRevision(Object revisionEntity) {
        ExampleRevEntity exampleRevEntity = (ExampleRevEntity) revisionEntity;
        ...
        exampleRevEntity.setUsername(...);

        exampleRevEntity.setTableName(...); // How to get the current table audited table?

    }
}

Я нашел это старое сообщение Получить имя таблицы аудита из спящего режима? но без соответствующего ответа. Большое спасибо


person akuma8    schedule 15.06.2020    source источник


Ответы (1)


Вы можете использовать EntityTrackingRevisionListener, который является расширением RevisionListener.

    public class ExampleRevEntityListener
                 implements EntityTrackingRevisionListener {
        @Override
        public void entityChanged(java.lang.Class entityClass, java.lang.String entityName, 
           java.io.Serializable entityId, RevisionType revisionType, java.lang.Object revisionEntity) {

            Table tableAnnotation = entityClass..getAnnotation(javax.persistence.Table.class).name();
        }
person Rohit    schedule 15.06.2020
comment
Спасибо, попробую. - person akuma8; 15.06.2020
comment
Я попробовал, но этого недостаточно, потому что в одной транзакции могут быть задействованы многие объекты. С этим решением берется только последняя таблица. Я должен искать другое решение. - person akuma8; 16.06.2020
comment
Он должен быть вызван для всех проверяемых лиц. сколько сущностей сохраняется в транзакции? - person Rohit; 18.06.2020
comment
Конечно, он вызывается для всех проверяемых объектов, но фиксируется только последний. Думаю, это нормальное поведение. В моем случае задействованы 3 объекта, и последний выигрывает. - person akuma8; 19.06.2020