libro
www.tuyano.com
初心者のためのJava Persistence API入門

JPAの基本を覚える (5/7)

作成:2017-10-28 09:15
更新:2017-10-28 09:15

■データの永続化(保存)

データの保存は、initメソッドで行なっています。ここではダミーとして3つのエンティティを保存しています。処理の流れを見ながら説明をしましょう。

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();
作業が終わったら、最後にエンティティマネージャを開放して作業終了です。トランザクションという枠を用意して、その中で処理をする、という考え方さえわかれば、そう難しいことではありません。

※プログラムリストが表示されない場合

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入門」に戻る