簡易書籍登録アプリケーションの説明(JPA版)
6.6 簡易書籍登録アプリケーションの説明(JPA版)
6.5で作成したアプリケーションをもとに、JPAを利用したデータ登録処理が実際どのような流れで動作しているのかを説明していきます。
6.6.1 Bmsクラス(コントローラークラス)
ここで重要なのは、フォームからPOST送信されたデータの取得・保存方法とリダイレクト処理です。それぞれ確認していきましょう。
ここでは、フォーム画面にアクセスしたときと、フォーム画面からPOST送信したときのそれぞれの処理を行うメソッドとしてinsertとinsertPostの2つを用意しています。これらを良く見ると、見慣れないアノテーションがいくつか追加されていますね。これが、今回のポイントです。
■@ModelAttributeアノテーション
insertPostメソッドにはBookインスタンスが引数として指定されていますが、これには「@ModelAttribute」というアノテーションが付けられています。これはエンティティクラスのインスタンスを自動的に用意するのに用いられます。引数には、インスタンスの名前を指定します。
これは送信されたフォームの値が自動的にBookインスタンスにまとめられて渡されます。これをそのまま保存すればいいのです。@ModelAttributeを利用することで、これだけシンプルに送信データを保存できるようになります。
なお、ここでは@ModelAttributeアノテーションを使っていますが、これを使わなければいけないというわけではありません。普通にnew Bookでインスタンスを作り、送られてきた値を1つ1つインスタンスに設定しても構わないのです。ただ、それは面倒だから、@ModelAttributeを使えば自動的にインスタンスを用意しておいてくれますよ、ということなのです。
■saveAndFlushによる保存
では、用意されたエンティティはどのようにして保存されるのでしょうか。これは、以下の処理で行なっています。
JpaRepositoryに用意されている「saveAndFlush」というメソッドは、引数のエンティティをデータベースにそのまま保存してくれます。非常に単純ですね。
■リダイレクト
リダイレクトの処理は、実は非常に簡単です。
上記の通り、new ModelAndView の引数に “redirect:○○” といった形で指定すればいいのです(○○は遷移先のURL)。たったこれだけで、別のページに遷移させることができてしまいます。フォワードの場合もやり方は同じです(“forward:○○”)。