CRUDの基本をマスターする (2/5)
作成:2015-08-01 08:38
更新:2015-08-01 08:38
更新:2015-08-01 08:38
■新しいエンティティの保存
続いて、エンティティの新規保存です。これは、考え方としてはとても簡単です。エンティティ・クラスのインスタンスを作成し、EntityManagerに用意されている保存用のメソッドを呼び出せばいいのです。
ただし! データベース操作は、単にデータを読み取るだけなら簡単ですが、データを書き換えるような場合には注意が必要です。データベースというのは、同時に複数の場所からアクセスされていることもあります。このため、他からデータがアクセスされている最中にデータを書き換えたりするとトラブルを起こしてしまいます。
そこで、データの書き換えが必要となる場合には、「トランザクション」というものを使わないといけません。トランザクションは、いくつもの処理をまとめて実行できるようにするための機能です。
トランザクションを指定している間、その処理を行っているデータに外部からアクセスができなくなります。トランザクション処理が完了したところで、他からデータにアクセスできるようになります。
トランザクションにより、一定の処理を行っている間、外部からアクセスできなくすることで、安全にデータベースを更新することができる、というわけです。では、処理の流れを見てみましょう。
データの追加はトランザクションなどといったものの使い方を覚えないといけませんが、これはデータベースを書き換える際の基本ですので、ここで基本的な使い方をしっかり覚えておくとよいでしょう。
ただし! データベース操作は、単にデータを読み取るだけなら簡単ですが、データを書き換えるような場合には注意が必要です。データベースというのは、同時に複数の場所からアクセスされていることもあります。このため、他からデータがアクセスされている最中にデータを書き換えたりするとトラブルを起こしてしまいます。
そこで、データの書き換えが必要となる場合には、「トランザクション」というものを使わないといけません。トランザクションは、いくつもの処理をまとめて実行できるようにするための機能です。
トランザクションを指定している間、その処理を行っているデータに外部からアクセスができなくなります。トランザクション処理が完了したところで、他からデータにアクセスできるようになります。
トランザクションにより、一定の処理を行っている間、外部からアクセスできなくすることで、安全にデータベースを更新することができる、というわけです。では、処理の流れを見てみましょう。
EntityTransaction transaction = manager.getTransaction();
EntityManagerの「getTransaction」により、EntityTransactionというクラスのインスタンスが取得されます。これが、トランザクションのクラスです。transaction.begin();
「begin」メソッドを実行してトランザクション処理を開始します。manager.persist(new SampleEntity("tuyano", "syoda@tuyano.com"));エンティティの新規追加は、EntityManagerの「persist」というメソッドを使います。引数にエンティティ・クラスのインスタンス(ここではSampleEntity)を指定して呼び出すことで、そのエンティティをデータベースに保存します。
manager.persist(new SampleEntity("hanako", "hanako@flower"));
manager.persist(new SampleEntity("taro", "taro@yamada"));
manager.persist(new SampleEntity("sachiko", "sachico@happy"));
manager.flush();最後にEntityManagerの「flush」を呼び出してフラッシュし、EntityTransactionの「commit」メソッドを呼び出してコミットすると、persistしておいたエンティティが全てデータベースに保存されます。コミットすると同時にトランザクション処理は終了し、データベースは開放されます。
transaction.commit();
データの追加はトランザクションなどといったものの使い方を覚えないといけませんが、これはデータベースを書き換える際の基本ですので、ここで基本的な使い方をしっかり覚えておくとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package com.tuyano.libro.db; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Query; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { public static void main(String[] args) { ApplicationContext app = new AnnotationConfigApplicationContext(SampleEntityConfig.class); EntityManagerFactory factory = app.getBean(EntityManagerFactory.class); EntityManager manager = factory.createEntityManager(); makeDummyData(manager); // get list Query query = manager.createQuery("from SampleEntity"); List list = query.getResultList(); printList(list); System.out.println("...ok."); } // create dummy entity data. public static void makeDummyData(EntityManager manager) { EntityTransaction transaction = manager.getTransaction(); transaction.begin(); manager.persist(new SampleEntity("tuyano", "syoda@tuyano.com")); manager.persist(new SampleEntity("hanako", "hanako@flower")); manager.persist(new SampleEntity("taro", "taro@yamada")); manager.persist(new SampleEntity("sachiko", "sachico@happy")); manager.flush(); transaction.commit(); } public static void printList(List list) { 略 } }
※関連コンテンツ
「初心者のためのSpring Framework入門」に戻る