Hibernate Envers 自定义侦听器无法使用 Spring Data JPA
Hibernate Envers Custom Listener not working with Spring Data JPA
我正在尝试使用我的 Spring 应用程序实现自定义修订实体以在修订 table 中添加用户名。但是 revinfo table 只有 rev 和 revtstmp 列,没有生成用户名列。我正在使用 Spring 数据 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 table 中正确填充。但是我正在尝试创建一个包含这些 类 的审计 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
解法:
问题是因为它是作为库添加的,Spring 应用程序忽略了 MyRevisionEntity。在@EntityScan 中添加MyRevisionEntity 的包就可以了。
我正在尝试使用我的 Spring 应用程序实现自定义修订实体以在修订 table 中添加用户名。但是 revinfo table 只有 rev 和 revtstmp 列,没有生成用户名列。我正在使用 Spring 数据 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 table 中正确填充。但是我正在尝试创建一个包含这些 类 的审计 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
解法:
问题是因为它是作为库添加的,Spring 应用程序忽略了 MyRevisionEntity。在@EntityScan 中添加MyRevisionEntity 的包就可以了。