亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法用休眠 - envers來審計,一個在其嵌入式Id中具有@Embedded的實體

有沒有辦法用休眠 - envers來審計,一個在其嵌入式Id中具有@Embedded的實體

嚕嚕噠 2022-09-22 13:46:50
我有一個實體集團記錄具有復合代碼BlocRecordId,并且在其復合代碼中有一個@Embedded(關系代碼ManyToOne)指向另一個原始記錄并希望審核實體集團記錄。實體集團記錄@Entity@Inheritance(strategy = InheritanceType.JOINED)@Table(name = "blocRecord")@Access(value = AccessType.FIELD)@Auditedpublic class BlocRecord {    @EmbeddedId    private BlocRecordId blocRecordId = new BlocRecordId();    @ManyToOne(fetch = FetchType.LAZY, optional = false)    @JoinColumns({            @JoinColumn(name = "record_identifier_", referencedColumnName = "identifier_", unique = false, nullable = false),            @JoinColumn(name = "record_recordType_", referencedColumnName = "recordType_", unique = false, nullable = false)})    @MapsId("record")    private Record record;...}標識類塊記錄 ID@Embeddablepublic class BlocRecordId implements Serializable {    @Embedded    private RecordId record;    @Column(name = "source_")    String source ;    @Column(name = "messageType_")    String messageType ;實體記錄@Entity@Inheritance(strategy = InheritanceType.JOINED)@Table(name = "records")@Access(value = AccessType.FIELD)@Auditedpublic class Record {    @EmbeddedId    private RecordId recordId = new RecordId();    @OneToMany(targetEntity = BlocRecord.class, fetch = FetchType.LAZY, mappedBy = "record")    private Set<BlocRecord> blocRecord = new java.util.HashSet<>();...}實體記錄的 id 類@Embeddablepublic class RecordId implements Serializable{    @Column(name = "identifier_")    String identifier ;    @Column(name = "recordType_")    String recordType ;}休眠 -envers 在嘗試在可嵌入的 BlocRecordId 中生成字段記錄的元數據時失敗,引發流動異常您知道如何解決問題嗎?
查看完整描述

1 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

目前,Envers 不支持在可嵌入對象中嵌套嵌入對象的想法,當我們映射標識符列時,如您的示例所示。Envers 目前支持的唯一有效映射是可嵌入對象中的屬性是 a 或 類型。@ManyToOne@Basic


您可以解決此問題,但它涉及更明確一點,而不是使用。我的意思是重寫如下:RecordIdBlocRecordId


@Embeddable

public class BlocRecordId implements Serializable {

  @Column(name = "identifier_")

  String identifier;


  @Column(name = "recordType_")

  String recordType;


  @Column(name = "source_")

  String source;


  @Column(name = "messageType_")

  String messageType;


  @Transient

  private RecordId recordId;


  /** Helper method to assign the values from an existing RecordId */

  public void setRecordId(RecordId recordId) {

    this.identifier = recordId.getIdentifier();

    this.recordType = recordId.getRecordType();

  }


  /** Helper method to get the RecordId, caching it to avoid multiple allocations */

  public RecordId getRecordId() {

    if ( recordId == null ) {

      this.recordId = new RecordId( identifier, recordType );

    }

    return this.recordId;

  }

}

我同意這并不理想,但它至少可以解決代碼的當前限制。我已經添加并添加了HHH-13361作為開放問題來支持這一點。如果您愿意,歡迎您做出貢獻,或者我將努力為Envers 6.0提供此支持。


查看完整回答
反對 回復 2022-09-22
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號