Wir haben eine Microweb-Dienstumgebung, in der AbstractAuditingEntity von einem anderen gemeinsamen Mikro-Dienst stammt. Und ich möchte @CreatedBy Eigenschaft dieser abstrakten Klasse mit meinem eigenen definierten Wert überschreiben.So überschreiben Sie den @CreatedBY-Wert von AbstractAuditingEntity im Frühling JPA
Mein Code ist unten angegeben.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractAuditingEntity {
@Column(name = "created_by", insertable = true, updatable = false, nullable = false)
@CreatedBy
private String createdBy;
@Column(name = "created_date", insertable = true, updatable = false, nullable = false)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@CreatedDate
private DateTime createdDate;
@Column(name = "last_modified_by", nullable = false)
@LastModifiedBy
private String lastModifiedBy;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@LastModifiedDate
private DateTime lastModifiedDate;
// @Transient
public abstract Long getInternalId();
// @Transient
public abstract void setInternalId(Long internalId);
public DateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(DateTime createdDate) {
this.createdDate = createdDate;
}
public DateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(DateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getLastModifiedBy() {
return lastModifiedBy;
}
public void setLastModifiedBy(String lastModifiedBy) {
this.lastModifiedBy = lastModifiedBy;
}
}
Und meine Domain-Klasse ist wie
@Entity
@Table(name = "programs")
@AttributeOverride(name = "createdBy", column = @Column(name = "created_by"))
public class Program extends AbstractAuditingEntity {
@Id
@SequenceGenerator(name = "programs_seq", sequenceName = "programs_seq")
@GeneratedValue(generator = "programs_seq")
@Column(name = "internal_id", nullable = false)
private Long internalId;
private String programName;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
//Start getters & setters - auto generated by IDE
@Override
public Long getInternalId() {
return internalId;
}
@Override
public void setInternalId(Long internalId) {
this.internalId = internalId;
}
public String getProgramName() {
return programName;
}
public void setProgramName(String programName) {
this.programName = programName;
}
}
Wenn wir versuchen, in der Datenbank dieses Domain-Objekt zu beharren, userdef Wert von mir zur Verfügung gestellt wird, nicht fortbestehen immer noch statt Spring-Framework seine eigene Zugabe Wert. Ich habe versucht, @AttributeOverride, aber es funktioniert nicht in meinem Fall.
Vielen Dank im Voraus für Hilfe.
Beachten Sie, dass die natürliche Vorgehensweise * ohne Spring * darin besteht, einen 'RevisionEntityListener' zu erstellen und den Wert für die Revisionsinstanz festzulegen, nachdem Envers sie erstellt hat. Das Obige ist im Wesentlichen Spring's Wrapper um dieses Feature. – Naros
Ich bin mir dieses Szenarios bewusst. Aber alle diese Konfigurations- und AuditorAware-Schnittstelle ist in einem gemeinsamen Dienst implementiert, der von vielen anderen Diensten verwendet wird. Und jetzt kommt mein aktueller CreatedBy und Updatedby Wert nur auf diese Weise. Aber ich möchte diesen Wert in meinem individuellen Dienst mit einem anderen Wert überschreiben. Gibt es eine Möglichkeit, dies zu tun? Danke für Ihren Vorschlag. Aber ich suche nach mehr Lösung. – Kat