Ich habe ein Problem mit JPA Auditing und für @Embedded
Mitglieder. Betrachten Sie die folgende Beispielszenario:Auditing und @Embedded im Frühjahr Daten JPA
I eine Testtabelle in einer Oracle-DB eingerichtet:
CREATE TABLE AUDIT_TEST (
ID NUMBER(38) NOT NULL PRIMARY KEY,
CREATION_DATE TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL
);
I definieren eine JPA @Entity
mit Revisions:
@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;
}
}
Schließlich ermöglichen I JPA Revision in mein :
@SpringBootApplication()
@EnableJpaAuditing()
public class AuditTestApplication {
}
So weit so gut; Wenn ich eine AuditTest
Instanz erstelle, weisen Sie ihr eine ID und ein Commit zu, die Spalte creationDate
wird wie erwartet mit dem aktuellen Zeitstempel gefüllt.
jedoch Dinge aufhören zu arbeiten, wenn ich die Prüfung Spalte in einer @Embeddable
kapseln:
@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;
}
}
Dann habe ich meine Entitätsklasse ändern das Erstellungsdatum einzubetten:
@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;
}
}
Und leider die Prüfung funktioniert nicht mehr.
Kennt jemand hier eine Möglichkeit, die Auditing-Funktionalität zu speichern, während immer noch @Embedded
Klassen verwendet werden?
Die Informationen haben auf einer verwalteten Einheit sein (zumindest das ist, wie es gemacht wird und funktioniert jetzt). Daher gibt es momentan keinen anderen Weg, sie direkt zur Entität hinzuzufügen. –
Hallo, also die einzige verfügbare Option besteht darin, jeder Entität die erforderlichen Felder direkt hinzuzufügen, z. B .: Benutzerersteller, Benutzeraktualisierung, Datumserstellungsdatum, Datum updateDate? Ist es richtig? – Paolo