Ric*_*ila 3 java spring jpa hibernate-envers
我正在使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
就像hibernate没有考虑这个类一样,因为它应该足以让它使用注释:@RevisionEntity(AuditingRevisionListener.class).其他带注释的实体已得到很好的认可,但这只是被忽略了.我们在spring config中(我们不使用persistence.xml)在加载spring上下文时要扫描的基础包:
<context:component-scan base-package="our.basepackage" />
Run Code Online (Sandbox Code Playgroud)
这够了吗?
我们还尝试了另一种方法.在EntityManagerFactory配置中使用此属性手动设置修订侦听器
<prop key="org.hibernate.envers.revision_listener">our.basepackage.AuditingRevisionListener</prop>
Run Code Online (Sandbox Code Playgroud)
但是我们在newRevision方法的第一行得到了classcastexception,因为参数revisionEntity不是AuditedRevisionEntity类.再次就像没有加载AuditedRevisionEntity类.
我提出这是一个简单的问题,但我无法猜测为什么@RevisionEntity注释被忽略了.任何的想法?
最后我得到了问题所在.我的嫌疑人是对的,由于EntityManagerFactory配置中的这个参数,hibernate忽略了我的Envers类:
<property name="packagesToScan" value="our.basepackage.otherpackage" />
Run Code Online (Sandbox Code Playgroud)
我们需要告诉hibernate检查'our.basepackage'.傻问题易解决.
| 归档时间: |
|
| 查看次数: |
3599 次 |
| 最近记录: |