【问题标题】:Hibernate Envers Custom Listener not working with Spring Data JPAHibernate Envers 自定义侦听器不适用于 Spring Data JPA
【发布时间】:2019-04-10 10:04:00
【问题描述】:

我正在尝试使用我的 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 表中。但我正在尝试创建一个包含这些类的审计 jar,然后将 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

【问题讨论】:

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


【解决方案1】:

解决方案:

问题是因为它是作为库添加的,所以 Spring 应用程序忽略了 MyRevisionEntity。在@EntityScan 中添加MyRevisionEntity 的包就可以了。

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 2014-07-02
    • 2017-07-09
    • 2021-12-15
    • 1970-01-01
    • 2016-10-20
    • 2023-03-25
    • 2023-03-06
    • 2013-10-31
    相关资源
    最近更新 更多