EclipseLink JPA テーブルをEntityへ読込む際に初期化する


JPAのEntityManagerでレコード読み込み時、Nullだったら空文字に勝手にしたい場合の対処法を記載します。


/**
 * The persistent class for the database table.
 * 
 */
@Entity
@Table(name="sample_table")
@NamedQuery(name="sample_table.findAll", query="SELECT o FROM sample_table o")
public class sample_table implements Serializable {
 private static final long serialVersionUID = 1L;

@EmbeddedId
 private sample_tablePK id;

@Column(name="Id")
 private String id;
 
 @Column(name="col1")
 private String col1;

・・・

・・・

/**
 * PostLoadアノテーションは、EntityManagerでem.setResultListやNamedQuery/NativeQueryなどでレコードアクセスし、
 * Entityへロードする際にフックされる。
 */
 @PostLoad
 private void whenLoadEntity(){
 // System.out.println("================== POST LOAD ====================");
 if(this.col1 == null) this.col1 = "";

・・・(その他レコードロード時の初期化処理を行う)
}

  • @PostLoad
  • private void whenLoadEntity()

上記2行がポイントです。PostLoadアノテーションは、EntityManagerでem.setResultListやNamedQuery/NativeQueryなどでレコードアクセスし、Entityへロードする際にフックされます。

Entityに値が入る前に設定してしまえばNullPointerExceptionの会費になります。但し、Entityを読込のみとして利用する場合に限定する必要がありそうです。(ここら辺はもう少し調べる必要があるかも)


投稿者: cova

ザムウ取締役CTO。2010年に香川県三豊市へ移住。フリーランスSEとして活動をはじめる。とある機構にて中小企業の経営支援と、小学校にてICT講習も務める。2022年現在、子育て支援NPO理事、短大専任講師を兼任する。 【主な資格】経営学修士(MBA)修了、国家試験応用情報技術者、国内初の夫婦ITコーディネーター。 その他、2022年4月:2児(4歳・1歳)の父。 #赤ちゃんから学ぶ経営学 を配信。