2 回答
TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
看配置設(shè)置org.hibernate.envers.do_not_audit_optimistic_locking_field。
此配置設(shè)置控制 Hibernate Envers 是否將@Version在審計(jì)模式中包含帶注釋的字段。默認(rèn)情況下,該設(shè)置設(shè)置為true這意味著不會(huì)審核樂(lè)觀鎖定字段。通過(guò)將此設(shè)置為false,您將審核列的值。
我確實(shí)想提醒您將此字段設(shè)置為false.
如果您的應(yīng)用程序執(zhí)行顯式樂(lè)觀鎖定增量功能,這將導(dǎo)致將額外的行添加到審計(jì)歷史表中,即使在您的業(yè)務(wù)流程中沒(méi)有更改任何其他數(shù)據(jù)庫(kù)列。這是因?yàn)橐坏﹩⒂?code>@Version要跟蹤的字段,Hibernate Envers 就會(huì)簡(jiǎn)單地將它們視為實(shí)體上的任何其他基本屬性。因此,強(qiáng)制樂(lè)觀鎖增量將觸發(fā)審計(jì)更改。
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
正如您所提到的 - REVINFO 是所有被審計(jì)實(shí)體的集中表。
下面介紹的基本思想是將修訂號(hào)重新映射到整數(shù)序列 - 因此 RevNumber(2,5,31,125) 將重新映射到 customVersion(1,2,3,4)
假設(shè)您有EntityA并且您想要為其獲取所有版本(并將每個(gè)版本數(shù)據(jù)映射到自定義類RevisionEntityDto)。
使用AuditReader來(lái)自 Envers,您可以執(zhí)行以下操作:
AuditReader auditReader = AuditReaderFactory.get(entityManager);
//getRevisions() returns revisions sorted in ascending order (older revisions come first)
List<Number> entityARevisions = auditReader.getRevisions(EntityA.class, primaryKeyOfEntityA);
//entityARevisions is already sorted;
for (int customVersion = 0; customVersion < entityARevisions.size(); customVersion++) {
createRevisionEntityDto(primaryKeyOfEntityA, auditReader, revision, customVersion);
}
private RevisionEntityDto createRevisionEntityDto(Long primaryKeyOfEntityA, AuditReader, Number revision) {
EntityA revisionOfEntityA = auditReader.find(EntityA.class, primaryKey, revision);
Date revDate = auditReader.getRevisionDate(revision);
// at this point you have a single revision of EntityA
return toRevisionEntityDto(revision, revisionOfEntityA, revDate);
}
private RevisionEntityDto toRevisionEntityDto(Number revision, EntityA revisionOfEntityA, Date revisionDate, int customVersion) {
//here you do the mapping logic;
RevisionEntityDto revEntityDto = new RevisionEntityDto();
revEntityDto.setFieldA(revisionOfEntityA.getFieldA);
revEntityDto.setDate(revisionDate); // you can use the date to sort if you want at a later stage;
revEntityDto.setCustomVersion(customVersion);
return revEntityDto;
}
添加回答
舉報(bào)
