2016-01-13 7 views
0

Требование состоит в том, чтобы добавить столбец имени пользователя для каждой записи аудита.Hibernate envers добавить контрольный столбец (имя пользователя)

После многопользовательской игры и прохождения через обратные документы я выяснил, как ее реализовать. Я реализовал это следующим образом:

Реализован ревизионную слушатель:

@Configurable 
public class UserRevisionListener implements RevisionListener 
{ 
    public void newRevision(Object revisionEntity) 
    { 
     UserRevEntity revision = (UserRevEntity) revisionEntity; 
     String username = ""; 
     Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
     Object principal = auth.getPrincipal(); 

     if (principal != null && principal instanceof DepotUser) 
      username = ((DepotUser) principal).getUsername(); 

     revision.setUsername(username); 
    } 
} 

Создать класс сущностей:

@Entity 
@Table(name = "USER_REV_ENTITY") 
@RevisionEntity(UserRevisionListener.class) 
public class UserRevEntity extends DefaultRevisionEntity 
{ 
    private static final long serialVersionUID = 1L; 
    private String    username; 

    public String getUsername() 
    { 
     return username; 
    } 

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

Я называет ссылку, которая имеет пример тот же «Thinking in Software» ,

Аудит по умолчанию работает нормально.

Во-первых, таблица ревизии ревизии с новым столбцом имени пользователя должна автоматически генерироваться (Я думаю!). Его не получают.

Итак, я попытался создать таблицу и добавить отображение таблицы в UserRevEntity. Но не повезло.

Может ли кто-нибудь помочь мне определить проблему?

Спасибо, заранее.

ответ

0
@MappedSuperclass 
public class DefaultRevisionEntity implements Serializable { 

@Id 
@GeneratedValue 
@RevisionNumber 
private int id; 

@RevisionTimestamp 
private long timestamp; 

// ... rest of the class body here.... 

Это DefaultRevisionEntity, который уже объявлен с идентификатором & меткой времени. Для вашего нового имени пользователя в столбце он должен быть аннотирован как @Column в UserRevEntity, как указано ниже.

@Column(name="username") 
private String username; 
Смежные вопросы