第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用休眠環(huán)境時(shí),AUD 表中的所有 @Version 字段都為空,但在實(shí)體 - 表中填充好嗎?

使用休眠環(huán)境時(shí),AUD 表中的所有 @Version 字段都為空,但在實(shí)體 - 表中填充好嗎?

搖曳的薔薇 2022-05-12 15:38:20
有應(yīng)用程序 spring+jpa+envers(hibernate) envers 需要在特殊表中保存實(shí)體的歷史記錄。在我保存了幾次我的實(shí)體后,我希望在 USER 表中看到填充的版本字段,并在 USER_AUT 中看到填充的版本字段。但實(shí)際結(jié)果是 USER 表中的正確值,但添加了 REV_TYPE、REV 列(在字段中只是所有行的 couter)和版本列中的 null。我使用 4.0.1.Final 休眠<dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-envers</artifactId>    <version>4.0.1.Final</version></dependency><dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-entitymanager</artifactId>    <version>4.0.1.Final</version></dependency>但是,當(dāng)我查看表格時(shí),版本字段中的所有值都是空的我的實(shí)體是import lombok.*;import org.hibernate.annotations.GenericGenerator;import org.hibernate.envers.Audited;import javax.persistence.*;@Entity@Audited@Table(name = "User", uniqueConstraints = {        @UniqueConstraint(columnNames = { "prKey"})})@NoArgsConstructor(access = AccessLevel.PUBLIC)@AllArgsConstructor@Getter@Setterpublic class User {    @Id    @GeneratedValue(generator = "uuid")    @GenericGenerator(name = "uuid", strategy = "uuid2")    @Column(name = "PR_KEY", unique = true)    private String prKey;    @Column(name = "name", length = 100, unique = false)    private String name;    @Version    private int version;    public User(String name){        this.name = name;    }}當(dāng)我使用審計(jì)獲取實(shí)體時(shí): public List<User> getHistory(String id) {        AuditReader auditReader = AuditReaderFactory.get(entityManagerFactory.createEntityManager());        List<Number> auditVersions = auditReader.getRevisions(User.class, id);        List<User> users = auditVersions.stream().map(item -> auditReader.find(User.class, id, item.intValue())).collect(Collectors.toList());        return extractRiskMetrics(riskMetricRecords);    }
查看完整描述

2 回答

?
qq_花開(kāi)花謝_0

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ì)更改。


查看完整回答
反對(duì) 回復(fù) 2022-05-12
?
動(dòng)漫人物

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;

}


查看完整回答
反對(duì) 回復(fù) 2022-05-12
  • 2 回答
  • 0 關(guān)注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)