My memonote about Java programming

I'm Japanese studying Java programming in Sweden. I write for myself about what I have learned today here, but I would be happy if this blog also helps someone else.

Auditing in SpringData

今やってる課題はSpringDataを使ってプロジェクトマネージメントツールを作るというものです。それはグループワークなのですが、昨日グループの課題がひと段落付いたので、個人の課題に目を通したら、それのひとつにAuditingがありました。先生はだいたいいつも生徒におまかせで、生徒が質問しても、自分で調べてって言われる事もあります。すごく良い先生なんです(皮肉ではなく)。自分で調べられるという事が大事なので、それも含めて課題なのです。授業でやった事も無いし、事前に口頭での説明も何も無かったので、昨日個人課題の内容をちゃんと見るまでAuditingが何なのかすら知りませんでした。なのでまず、Auditingが何なのか調べてみました。どうやらこれは、『誰がデータを作成/編集したか、いつデータを作成/編集したか』という情報を得るためのものみたいです。

先生の説明書きに、下のリンクが貼ってありました。
Spring Data JPA - Reference Documentation

 

Googleで調べてみたら、@EntityListeners使えるって書いてあるけど、そのリンク、XML使ってるんだよね。先生はいつもannotationを推奨してるのに、なんで?って戸惑いました。私はAnnotationの方がわかりやすくて好きなので、できればXMLは避けたいと思い、@EnableJpaAuditingと、@EntityListeners(AuditingEntityListener.class)の組み合わせでやってみる事にしました。

 

AbstractEntity

 

グループワークの方で、superclassのAbstractEntityクラスを作ってあったので丁度良かったです。idやcontrolNumberは全entityクラス共通なので、シンプルにするためです。Don't repeat yourself.

次に、DateTimeProviderをimplementするクラス(私のはAuditingDateTimeProvider)と、AuditorAware<T>をimplementするクラス(私のはUsernameAuditorAware)を作って、Configクラス(私のはAppConfigって名前ですが)にそれらクラスのオブジェクトを作るメソッドを作って@Beanをつけます。Configクラスに@EnableJpaAuditing(auditorAwareRef = " ", dateTimeProviderRef = " ")を付け足します。" "の中には、それぞれさっきAppConfigに作ったメソッド名を入れます。私の場合はこうなりました。@EnableJpaAuditing(auditorAwareRef = "auditorProvider", dateTimeProviderRef = "dateTimeProvider")

 

AuditingDateTimeProvider

 

UsernameAuditorAware

 

 私のプロジェクトには、ログイン機能とかまだ無いから、誰がデータをいじっているのか分からないので、今のところ、リターンタイプをStringにして、"DefaultUser"ってhardcodeしちゃいました。

 

AppConfig

 

こんな感じです。結果、ちゃんと誰がいつ編集したか等の、全ての情報がデータベースに反映されました。でもまだ先生から合格をもらってないから、これで良いのかわからないんだけどね。これを先生に見せるのは19日の金曜日です。合格もらえますように。