2016-01-13 94 views
0

要求是爲每個審計條目添加用戶名列。Hibernate envers添加審計列(用戶名)

經過googling很多,並通過有效的文檔,我想出瞭如何實現它。

實施了修訂聽衆:

@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,它已經與ID &時間戳聲明。 對於新的列用戶名,它必須在UserRevEntity中註釋爲@Column,如下所示。

@Column(name="username") 
private String username; 
相關問題