Tôi cần phải làm một số xử lý cơ sở dữ liệu trong phiên bản nghe của hibernate-envers. Đối với điều đó tôi cần khả năng inejction của Spring Framework. Làm thế nào điều này có thể được thực hiện? Đây là mã đại diện cho nhu cầu nhưng CustomRevisionListener được khởi tạo bởi một hàm tạo trong mã Envers. Mùa xuân chỉ có SecurityContextHolder
làm trình định vị dịch vụ tĩnh. Làm thế nào để tiêm đậu khác?hibernate-envers RevisionListener mùa xuân hội nhập như đậu mùa xuân
@Service
public class CustomRevisionListener implements EntityTrackingRevisionListener {
@Resource
private PersistenceManagerHibernate persistenceManagerHibernate;
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername(getUsername());
}
public String getUsername() {
final SecurityContext context = SecurityContextHolder.getContext();
if (context != null) {
if (context.getAuthentication() != null) {
return context.getAuthentication().getName();
} else {
return "anonymous";
}
}
return "anonymous";
}
@Override
public void entityChanged(@SuppressWarnings("rawtypes") Class entityClass, String entityName, Serializable entityId, RevisionType revisionType, Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setEntityId(entityId.toString());
revision.setEntityName(entityName);
revision.setRevisionType((int)revisionType.getRepresentation());
Auditable auditable = null;
if (entityId instanceof Long) {
auditable = persistenceManagerHibernate.findById(entityClass, (Long)entityId);
}
revision.setGroupName(auditable.getAuditGroupName());
revision.setGroupEntityId(auditable.getAuditGroupId());
}
}
Cảm ơn, làm việc tuyệt vời. – realcnbs