JPAの基本を覚える (5/7)
作成:2017-10-28 09:15
更新:2017-10-28 09:15
更新:2017-10-28 09:15
■データの永続化(保存)
データの保存は、initメソッドで行なっています。ここではダミーとして3つのエンティティを保存しています。処理の流れを見ながら説明をしましょう。
1. トランザクションの開始
データの書き換えを行う処理を実行する場合、作業開始から修了までの間に他からアクセスがあって更にデータが変更されたりすると、データが思わぬ形で書き換わってしまう危険もあります。そこで、トランザクションにより一連の作業をまとめて実行するのです。
トランザクションは、EntityTransactionというクラスとして用意されています。これは、EntityManagerクラスの「getTransaction」メソッドにより取得されます。そして、このEntityTransactionクラスの「begin」メソッドを呼び出すことで、トランザクションが開始されます。
2. エンティティの作成
3. 永続化の実行
4. コミットする
5. エンティティマネージャを開放
1. トランザクションの開始
manager.getTransaction().begin();「トランザクション」は、一連の処理を一括して実行するためのものです。特にデータの書き換えを要するような操作を行う際に利用します。例えば大勢がサイトにアクセスしている場合、データベースに同時に複数がアクセスするようなことだって考えられます。
データの書き換えを行う処理を実行する場合、作業開始から修了までの間に他からアクセスがあって更にデータが変更されたりすると、データが思わぬ形で書き換わってしまう危険もあります。そこで、トランザクションにより一連の作業をまとめて実行するのです。
トランザクションは、EntityTransactionというクラスとして用意されています。これは、EntityManagerクラスの「getTransaction」メソッドにより取得されます。そして、このEntityTransactionクラスの「begin」メソッドを呼び出すことで、トランザクションが開始されます。
2. エンティティの作成
new MyDataEntity("taro", "taro@yamada", "090-999-999")保存するエンティティを用意します。これは、newでエンティティクラスのインスタンスを作るだけです。MyDataEntityでは、名前、メールアドレス、電話番号の3つの引数を持つコンストラクタを用意していますので、これらを指定してインスタンスを作成します。
3. 永続化の実行
manager.persist(……エンティティ……);作成したエンティティは、EntityManagerの「persist」メソッドを使います。引数にエンティティを指定して呼び出すことで、エンティティが永続化(要するにデータベースにレコードとして保存)されます。ただし! トランザクションでは、すべての処理は一括して実行されるので、実はまだこの段階では保存はされていません。
4. コミットする
manager.getTransaction().commit();すべての作業(ここではpersistによる保存)が終わったところで、トランザクションをコミットします。これは、EntityTransactionクラスの「commit」メソッドで行います。これにより、それまで実行されていた処理を一括して実行します。
5. エンティティマネージャを開放
manager.close();作業が終わったら、最後にエンティティマネージャを開放して作業終了です。トランザクションという枠を用意して、その中で処理をする、という考え方さえわかれば、そう難しいことではありません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
@Override public void init() throws ServletException { super.init(); EntityManager manager = factory.createEntityManager(); try { manager.getTransaction().begin(); manager.persist( new MyDataEntity("taro", "taro@yamada", "090-999-999") ); manager.persist( new MyDataEntity("hanako", "hanako@flower", "080-888-888") ); manager.persist( new MyDataEntity("sachiko", "sachiko@happy", "070-777-777") ); manager.getTransaction().commit(); } finally { manager.close(); } }
※関連コンテンツ
「初心者のためのJava Persistence API入門」に戻る