ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 为什么Hibernate Envers忽略了我的自定义RevisionEntity?

2019-08-30 21:20:05  阅读:241  来源: 互联网

标签:hibernate-envers java spring jpa


我正在使用Spring 4.0.2开发一个使用JPA 2.1(由hibernate 4.2.11支持)的应用程序.我们使用Envers审核项目实体的变更.这工作正常.
当我们尝试使用自定义修订实体作为Envers文档时说:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog

我们已经在文档中指出了一个自定义类和一个自定义监听器,但似乎Hibernate完全忽略了它们.自定义类:

@Entity
@RevisionEntity(AuditingRevisionListener.class)
public class AuditedRevisionEntity extends DefaultRevisionEntity {
  private String username;

  public String getUsername() {
    return username;
  }

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


public class AuditingRevisionListener implements RevisionListener {
  private static Log log = LogFactory.getLog(AuditingRevisionListener.class.getName());

  @Override
  public void newRevision(Object revisionEntity) {
    AuditedRevisionEntity revEntity = (AuditedRevisionEntity) revisionEntity;
    String userName = SecurityContextHolder.getContext().getAuthentication().getName();
    revEntity.setUsername(userName);
  }

}

就像hibernate没有考虑这个类一样,因为它应该足以让它使用注释:@RevisionEntity(AuditingRevisionListener.class).其他带注释的实体已得到很好的认可,但这只是被忽略了.我们在spring config中(我们不使用persistence.xml)在加载spring上下文时要扫描的基础包:

  <context:component-scan base-package="our.basepackage" />

这够了吗?

我们还尝试了另一种方法.在EntityManagerFactory配置中使用此属性手动设置修订侦听器

    <prop key="org.hibernate.envers.revision_listener">our.basepackage.AuditingRevisionListener</prop>

但是我们在newRevision方法的第一行得到了classcastexception,因为参数revisionEntity不是AuditedRevisionEntity类.再次就像没有加载AuditedRevisionEntity类.

我提出这是一个简单的问题,但我无法猜测为什么@RevisionEntity注释被忽略了.
任何的想法?

解决方法:

最后我得到了问题所在.我的嫌疑人是对的,由于EntityManagerFactory配置中的这个参数,hibernate忽略了我的Envers类:

<property name="packagesToScan" value="our.basepackage.otherpackage" />

我们需要告诉hibernate检查’our.basepackage’.
傻问题易解决.

标签:hibernate-envers,java,spring,jpa
来源: https://codeday.me/bug/20190830/1770515.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有