Hibernate Envers Custom Listener не работает с Spring Data JPA - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь реализовать пользовательскую версию ревизии с моим приложением Spring, чтобы добавить имя пользователя в таблицу ревизий.Но таблица revinfo имеет только столбцы rev и revtstmp, столбец имени пользователя не генерируется.Я использую Spring Data JPA.Ниже приведен код, который я пробовал:

import com.xyz.listener.MyRevisionListener;
import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RevisionEntity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "revinfo")
@RevisionEntity(MyRevisionListener.class)
public class MyRevisionEntity extends DefaultRevisionEntity {
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Column(name = "username")
    private String username;
}
import com.xyz.entity.MyRevisionEntity;
import org.hibernate.envers.RevisionListener;

public class MyRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        MyRevisionEntity rev = (MyRevisionEntity) revisionEntity;
        String userId = ContextAccessor.getUserId();
        rev.setUsername(userId);
    }
}

Приведенный выше код работает нормально, если я напрямую добавляю вышеупомянутые классы в свой микросервис и имя пользователя правильно заполняется в таблице revinfo.Но я пытаюсь создать контрольную флягу, в которой есть эти классы, и затем я добавляю флягу в свой микросервис, тогда MyRevisionListener не вызывается.

Если я добавлю spring.jpa.properties.org.hibernate.envers.revision_listener=com.xyz.listener.MyRevisionListener в application.properties, то вызывается слушатель, но я получаю ошибку java.lang.ClassCastException: org.hibernate.envers.DefaultRevisionEntity cannot be cast to com.xyz.entity.MyRevisionEntity

1 Ответ

0 голосов
/ 11 апреля 2019

Решение:

Проблема заключалась в том, что поскольку приложение было добавлено в виде библиотеки, приложение Spring игнорировало MyRevisionEntity.Добавьте пакет MyRevisionEntity в @EntityScan, и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...