Hibernate Envers Custom Listener不适用于Spring Data JPA

时间:2019-04-10 10:04:00

标签: java hibernate spring-data-jpa hibernate-envers

我正在尝试使用Spring应用程序实现自定义修订版实体,以在修订表中添加用户名。但是revinfo表仅具有rev和revtstmp列,而不会生成username列。我正在使用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表中正确填充了用户名,则上述代码可以正常工作。但是我试图创建一个包含这些类的审核jar,然后将其添加到微服务中,然后不会调用MyRevisionListener。

如果我在application.properties中添加spring.jpa.properties.org.hibernate.envers.revision_listener=com.xyz.listener.MyRevisionListener,则会调用侦听器,但会收到错误消息 java.lang.ClassCastException: org.hibernate.envers.DefaultRevisionEntity cannot be cast to com.xyz.entity.MyRevisionEntity

1 个答案:

答案 0 :(得分:0)

解决方案:

问题在于,由于它是作为库添加的,因此Spring应用程序忽略了MyRevisionEntity。在@EntityScan中添加MyRevisionEntity包,它将起作用。