UPDATE

概要

このページでは、SimpleORM4Jを使用した更新処理(UPDATE)に関してご説明をしていきます。
SimpleORM4Jで実行できる更新処理は以下の2種類となります。

  • Criteriaを使用した更新処理
  • EntityManager#mergeを使用した更新処理

Criteriaを使用した更新処理

SimpleORM4Jでは、Criteriaで更新内容を作成してリレーショナルデータベースのデータを更新することができます。
処理の流れは以下となります。

処理1 Criteria#updateで、更新テーブルを指定する。
処理2 Criteria#setで、更新する値(Expression式)を指定する。
処理3 Criteria#whereで、更新レコード条件を指定する。

更新系(INSERT・UPDATE・DELETE)クエリの実行は、Query#executeUpdateメソッドを実行します。
このメソッドは登録・更新・削除をしたレコード数を返却します。

■ 実装例
try {
	EntityManager em = EntityManagerFactory.createEntityManager();
	Criteria criteria = em.getCriteria();
	criteria.update(Charge.class)
		  .set(Expression.equal(Charge.class.getDeclaredField("name"), "担当者D更新"),
			 Expression.equal(Charge.class.getDeclaredField("registDate"), ":registDate"),
			 Expression.equal(Charge.class.getDeclaredField("updateDate"), ":updateDate"))
		  .where(Expression.equal(Charge.class.getDeclaredField("id"), 6));
	Query query = em.createQuery(criteria);
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
	query.setParameter("registDate", sdf.parse("2020-04-08 20:20:20"));
	query.setParameter("updateDate", sdf.parse("2020-04-08 20:20:20"));
	int updCnt = query.executeUpdate();
	System.out.println("Update count : " + updCnt);
} catch (Exception e) {
	e.printStackTrace();
}

EntityManager#mergeを使用した更新処理

SimpleORM4Jでは、エンティティオブジェクトを更新して、リレーショナルデータベースに登録することができます。
この場合は、EntityManager#mergeメソッドを使用します。
EntityManager#mergeメソッドでは、更新対象のオブジェクトの@Idアノテーションが記述されたフィールド値で一意にオブジェクトを特定して、更新処理を実行します。

■ 実装例
try {
	EntityManager em = EntityManagerFactory.createEntityManager();
	Criteria criteria = em.getCriteria();
	criteria.select(User.class)
		  .from(User.class)
		  .where(Expression.equal(User.class.getDeclaredField("id"), ":id"));
	Query query = em.createQuery(criteria);
	query.setParameter("id", 5);
	User user = (User) query.getSingleResult();

	user.setName("テストユーザ006");
	user.setRegistDate(LocalDate.of(2020, 4, 8));
	user.setUpdateDate(LocalDateTime.of(2020, 4, 8, 18, 18, 18));
	int updCnt = em.merge(user);
	System.out.println("Update count : " + updCnt);
} catch (Exception e) {
	e.printStackTrace();
}

ご意見・ご感想・バグ報告

×

SimpleORM4Jへのご意見やご感想がございましたら、メッセージをお願い致します。
また、SimpleORM4Jを使用して頂きまして、バグがございましたらご連絡を頂けると助かります。
皆様からのご意見・ご感想をもとに、SimpleORM4Jを改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが 出来ない場合がございます。何卒ご容赦ください。

※印は必須です
タイトル
メールアドレス
内容