##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まじでえらい
テーブル操作をする時、マルチスレッドでなくてもトランザクションの管理をしっかりしておくべきですね