我對JPA審計和@Embedded
成員有問題。考慮以下示例場景:Spring數據審計和@Embedded JPA
我成立了一個Oracle數據庫的測試表:
CREATE TABLE AUDIT_TEST (
ID NUMBER(38) NOT NULL PRIMARY KEY,
CREATION_DATE TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL
);
我定義了一個JPA @Entity
與審計:
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "AUDIT_TEST")
public class AuditTest {
private Long id;
private LocalDateTime creationDate;
@Id
@Column(name = "ID")
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@CreatedDate
@Column(name = "CREATION_DATE")
public LocalDateTime getCreationDate() { return creationDate; }
public void setCreationDate(LocalDateTime creationDate) {
this.creationDate = creationDate;
}
}
最後,我啓用JPA審計我@Configuration
:
@SpringBootApplication()
@EnableJpaAuditing()
public class AuditTestApplication {
}
到目前爲止好;當我構造一個AuditTest
實例時,爲其分配一個ID並提交,creationDate
列將按照預期填充當前時間戳。
然而,事情停止工作時,我封裝在一個@Embeddable
審計列:
@Embeddable
public class AuditTestEmbeddable {
private LocalDateTime creationDate;
@CreatedDate
@Column(name = "CREATION_DATE")
public LocalDateTime getCreationDate() { return creationDate; }
public void setCreationDate(LocalDateTime creationDate) {
this.creationDate = creationDate;
}
}
然後我改變我的實體類嵌入創建日期:
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "AUDIT_TEST")
public class AuditTest {
private Long id;
private AuditTestEmbeddable auditTestEmbeddable = new AuditTestEmbeddable();
@Id
@Column(name = "ID")
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
@Embedded
public AuditTestEmbeddable getAuditTestEmbeddable() {
return auditTestEmbeddable;
}
public void setAuditTestEmbeddable(AuditTestEmbeddable auditTestEmbeddable) {
this.auditTestEmbeddable = auditTestEmbeddable;
}
}
不幸的是,審計已不再工作。
有沒有人知道在保留審計功能的同時仍然使用@Embedded
類的方法?
信息必須在託管實體上(至少這是如何完成和現在的工作)。所以目前沒有其他方法可以直接將其添加到實體中。 –
你好,所以唯一可用的選擇是直接向每個實體添加所需的字段,例如:用戶創建者,用戶更新者,日期creationDate,日期updateDate?這是對的嗎? – Paolo