@MappedSuperclass
作成日や最終更新日などのメタデータを含む があります。私のエンティティはすべてこのクラスを拡張します。@PreUpdate
このクラスには、対応するアクションの前にこれらのプロパティを設定する で注釈が付けられたメソッドもあります。
現在私を夢中にさせているのは、これがエンティティ A と C では機能するが、B では機能しないことです。これらはすべて、これBaseEntity
を直接拡張します。基本的に、動作が異なる理由はありません。さらに紛らわしいのは@PrePresist
、すべてのエンティティで正しく呼び出されていることです。B.
なぜこれが起こるのか誰にも分かりますか?それは私を夢中にさせています...
public class A extends BaseEntity {}
public class B extends BaseEntity {}
public class C extends BaseEntity {}
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
@Getter
@Setter(AccessLevel.PROTECTED)
@Version
private Long version;
@Getter
@Setter(AccessLevel.PROTECTED)
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created")
private Date created;
@Getter
@Setter(AccessLevel.PROTECTED)
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "last_modified")
private Date lastModified;
@Getter
@Setter(AccessLevel.PROTECTED)
@Column(name = "created_by")
private String createdBy;
@Getter
@Setter(AccessLevel.PROTECTED)
@Column(name = "last_modified_by")
private String lastModifiedBy;
@PreUpdate
public final void updateMetadata() {
lastModified = new Date();
if (SecurityContextHolder.getContext().getAuthentication() != null) {
lastModifiedBy = SecurityContextHolder.getContext()
.getAuthentication().getName();
}
}
@PrePersist
public final void createMetadata() {
created = new Date();
lastModified = created;
if (SecurityContextHolder.getContext().getAuthentication() != null) {
final String userName = SecurityContextHolder.getContext()
.getAuthentication().getName();
lastModifiedBy = userName;
createdBy = userName;
}
}
}