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を読込のみとして利用する場合に限定する必要がありそうです。(ここら辺はもう少し調べる必要があるかも)