2017-03-17 80 views
0

我使用下列獲得一個實體的版本:獲取完整的實體,與Hibernate envers

AuditReaderFactory.get(entityManager()) 
      .createQuery() 
      .forRevisionsOfEntity(Car.class, true, true) 
      .add(AuditEntity.id().eq(carId)) 
      .addOrder(AuditEntity.revisionNumber().asc()) 
      .getResultList() 

但是,未標有@Audited字段爲空,當他們應該有值。

如果我想要一個完全填充的實體,我必須手動合併未經審覈的值嗎?

+0

什麼讓你覺得未經審覈的字段是非空的? – Naros

回答

1

Hibernate Envers只使用審計歷史記錄表中的數據填充實例。唯一的例外是當一個關聯沒有被審計,並且暗示相關實體將被從主表中拉出。

所以,如果你有以下實體定義:

@Entity 
public class SimpleEntity { 
    @Id 
    @GeneratedValue 
    private Integer id; 
    private String data1; 
    @Audited 
    private String data2; 
    ... 
} 

的從Envers只會有填充iddata2領域返回的實例。 data1的值爲空,因爲該字段未被Envers審覈。

如果您期望一個完全填充的實體,那麼您需要考慮以某種方式將審計狀態與現有狀態合併。

+0

謝謝,這是我最終做的,手動合併它們以獲得完整的實體。 – LoneWolf