かあちゃんエンジニアの気まぐれ開発メモ

フリーランス15年から足を洗ったかあちゃんエンジニアの技術メモ

データベースに作成日時、作成者とかを自動で入れたいのだ

MySQLの5.6から更新日時は自動で入れられるようになったみたいですね。

へぇ〜便利。
MySQL5.6.5からDATETIME型で行生成時刻と更新時刻を自動でセットすることができるようになりましたよ

んで、さっそくSpring Bootで実装。
JPAツールでテーブルからEntityを自動生成。
作成日付設定せずに、Insert してみたらおこられた。
やっぱ値は入れないとだめなのだわ。ちぇ。


テーブルの作り方はここを参考にさせていただきました。
Spring JPAでCreatedTimeとUpdatedTimeを自動設定する | エンジニアっぽいことを書くブログ


ぐぐってみたら、Spring Dataのアノテーションを使うと、更新日時・更新者など自動でセットしてくれるとのこと。あるんだ!
taka-2.hatenablog.jp


AuditingConfigクラスで、更新者のところだけカスタマイズが必要で、ログインID(Integer) に変更した。

java

public static class SecurityAuditor implements AuditorAware {
@Override
public Optional getCurrentAuditor() {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return Optional.ofNullable(((UserInfo)principal).getPersonId());
}
}

Entityクラスには下記のアノテーションを追加します。

@EntityListeners(value = AuditingEntityListener.class)
クラス名のアノテーションに追加。
 
@CreatedBy
登録した人

@CreatedDate
登録した日

@LastModifiedBy
最終更新者

@LastModifiedDate
最終更新日



作成前、更新前などの永続化処理にフックして値を入れる共通クラスを作る、という方法もあったけどこっちのがスッキリしてて簡単だった。
フック処理については↓
Spring JPAでCreatedTimeとUpdatedTimeを自動設定する | エンジニアっぽいことを書くブログ