libro
www.tuyano.com
初心者のためのSpring Framework入門

CRUDの基本をマスターする (3/5)

作成:2015-08-01 08:41
更新:2015-08-01 08:41

■エンティティの更新

続いて、エンティティの更新です。既にデータベースに保存されているデータを更新する場合は、そのデータのエンティティを取得し、その値を書き換えて保存し直す、といった作業をしないといけません。

下のリスト欄に、簡単なサンプルを挙げておきました。実行すると、4つのダミーデータの内、2つの内容を書き換えて出力しています。

更新処理は、updateEntityというメソッドにまとめています。これは、値を書き換えるデータのID番号を引数に渡すようになっています。

では、処理の流れを見てみましょう。まず、EntityManagerインスタンスを取得しておき、それを使って処理を行っています。
SampleEntity entity = manager.find(SampleEntity.class, id);
SampleEntityインスタンスを取得しています。これはnewで新たに作るのではなく、EntityMangerの「find」メソッドを呼び出します。findは、特定のIDのエンティティを取り出すためのものです。これは引数にエンティティクラスのclass値と、取り出すエンティティのID値をそれぞれ指定します。

先に、一覧リストを取得するときは、後の処理なども考えると面倒でしたが、このようにEntityManagerのメソッドを使えば、IDを指定するだけでそのエンティティを取得できます。――もっとも、「IDもわからない」という状態ではこれは使えませんが。

後は、取得したエンティティのメソッドを呼び出して内容を更新します。
entity.setName("**update name**");
entity.setMail("**update@mail**");
編集が終わったら、新規作成と同様にトランザクションを使って更新処理をします。これは、基本的には新規作成と同じような流れになっていますが、更新を行う部分だけが違っています。
EntityTransaction transaction = manager.getTransaction();
transaction.begin();
manager.merge(entity);
manager.flush();
transaction.commit();
既に保存されているエンティティの更新は、「merge」というメソッドを使って行います。引数に更新するエンティティクラスのインスタンスを指定すると、そのエンティティの値を最新の状態に更新します。

後は、EntityManagerflushし、EntityTransactioncommitすれば作業終了です。更新は、新規作成と違い、「findで特定IDのエンティティを取得する」「mergeで更新する」といった処理をしないといけません。

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

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 {
    private static EntityManager manager;

    public static void main(String[] args) {
        ApplicationContext app = new 
            AnnotationConfigApplicationContext(SampleEntityConfig.class);

        EntityManagerFactory factory = app.getBean(EntityManagerFactory.class);
        manager = factory.createEntityManager();

        // make dummy
        makeDummyData();
        
        // update entity
        updateEntity(1L);
        updateEntity(3L);

        // get list
        Query query = manager.createQuery("from SampleEntity");
        List list = query.getResultList();
        printList(list);

        System.out.println("...ok.");
    }

    public static void makeDummyData() { 略 }
    public static void printList(List list) { 略 }
    
    // update entity
    public static void updateEntity(long id) {
        SampleEntity entity = manager.find(SampleEntity.class, id);
        entity.setName("**update name**");
        entity.setMail("**update@mail**");
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        manager.merge(entity);
        manager.flush();
        transaction.commit();
    }
}

※関連コンテンツ

「初心者のためのSpring Framework入門」に戻る