LoginSignup
2
2

More than 1 year has passed since last update.

EntityManagerを使った汎用的なDELETE INSERT UPSERT

Last updated at Posted at 2020-02-15

TRUNCATE

ロールバックしないので怖いですが、レコード数が多い場合は
テーブルを消してから作り直すことでレコードを全行削除する
TRUNCATEの方が、DELETEよりも高性能ですね

truncate.java
    @Transactional
    public void truncate(Class<? extends Object> entityClass) {
        em.createNativeQuery("TRUNCATE TABLE " + camelToSnake(entityClass.getSimpleName())).executeUpdate();
    }

camelToSnakeは前回に引き続き。
キャメルケースをスネークケースにするもので、その辺にライブラリ転がってると思うので内容は割愛します

DELETE

delete.java
    @Transactional
    public void truncate(Class<? extends Object> entityClass) {
        em.createNativeQuery("DELETE FROM " + camelToSnake(entityClass.getSimpleName())).executeUpdate();
    }

まぁDELETEも同じですね

INSERT

insert.java
    @Transactional
    public void insert(List<Object> entity) {
        entity.forEach(em::persist);
    }

一行ずつ、永続化コンテキストの管理下に置くpersistメソッドを施してあげる、そんだけですねぇ

UPSERT

upsert.java
    @Transactional
    public void insert(List<Object> entity) {
        entity.forEach(em::merge);
    }

mergeを使うと、差分のみupdateしてくれます
EntityManagerまじでえらい

テーブル操作をする時、マルチスレッドでなくてもトランザクションの管理をしっかりしておくべきですね

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2