エンティティ

エンティティについて

エンティティクラスは、SimpleORM4JでリレーショナルデータベースのROWデータを格納するクラスとなります。
また、エンティティクラスには以下のアノテーションを記述して、データベーステーブルとの関連付けを行う必要があります。
SimpleORM4Jはエンティティクラスに記述された各アノテーションに従って、データベースデータのマッピングを実行します。

  • Entityアノテーション(@Entity)
  • Tableアノテーション(@Table)
  • Columnアノテーション(@Column)
  • Idアノテーション(@Id)
  • GenerateValueアノテーション(@GenerateValue)

@Entityアノテーション

SimpleORM4Jで、マッピングクラスとなる「エンティティ」と認識されるためには、 @Entityアノテーションをクラスに記述します。
例としては以下のようになります。
下の例では、Schoolクラスはデータのマッピングクラスであるエンティティとして認識されます。
Entityアノテーションを記述しない場合は、エンティティとして認識されず、データのマッピングは実行されません。

/**
 * 学校エンティティ
 */
@Entity
@Table(name="mst_school")
public class School {
	〜 フィールド定義など 〜
}

@Tableアノテーション

各エンティティに対応するテーブルを定義するのがTableアノテーションです。
SimpleORM4Jでは、Criteria#fromメソッドのパラメータとされたエンティティのTableアノテーションに定義されたテーブル名を確認して、検索等の処理を実行しています。
Tableアノテーションが定義されていない場合は、エンティティクラス名がテーブル名として使用されます。
例としては以下のようになります。
下の例では、「criteria.from(School.class)」という処理を記述した際に、Tableアノテーションのname属性に指定された「mst_school」テーブルに対して、検索処理や削除処理が実行されます。

/**
 * 学校エンティティ
 */
@Entity
@Table(name="mst_school")
public class School {
	〜 フィールド定義など 〜
}

@Columnアノテーション

エンティティクラスの各フィールドがどのカラムに対応するかを定義するのがColumnアノーテーションです。
SimpleORM4Jでは、Criteria#selectメソッド等のパラメータとして指定されたフィールドに記述されたColumnアノテーションに定義されたカラム名に対して、検索処理や条件設定などが実行されます。
Columnアノテーションが定義されていない場合は、フィールド名がカラム名として使用されます。
例としては以下のようになります。
下の例では、Criteria#selectメソッドにnameフィールドがパラメータとして渡された場合は、Columnアノテーションのname属性で指定された「NAME」カラムの値が検索されます。
例)criteria.select(School.class.getDeclaredField("name"), ...)

/**
 * 学校エンティティ
 */
@Entity
@Table(name="MST_SCHOOL")
public class School {

	@Id
	@GenerateValue(strategy=GenerationType.SEQUENCE, sequence="SEQ_MST_SCHOOL")
	@Column(name="ID")
	private int id;

	@Column(name="NAME")
	private String name;

	// getter/setter
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

@Idアノテーション

エンティティクラスが対応するテーブルの主キーを定義するのがIdアノーテーションです。
SimpleORM4Jでは、EntityManager#merge(UPDATE)・EntityManager#remove(DELETE)等の処理で、オブジェクトがどのレコードを表すかを特定する為に、Idアノテーションで定義されたフィールド値を使用しています。
例としては以下のようになります。
下の例では、idフィールドを主キーとして定義しています。

/**
 * 学校エンティティ
 */
@Entity
@Table(name="MST_SCHOOL")
public class School {

	@Id
	@GenerateValue(strategy=GenerationType.SEQUENCE, sequence="SEQ_MST_SCHOOL")
	@Column(name="ID")
	private int id;

	〜 フィールド定義など 〜
}

@GenerateValueアノテーション

自動採番等でリレーショナルデータベース側で値が生成されるフィールドに対して記述するのがGenerateValueアノテーションです。
GenerateValueアノテーションが定義されているフィールドは、EntityManager#persist(INSERT)でオブジェクトの値が登録されずに、データベース側で採番がされます。
GenerateValueアノテーションには採番の種別に応じて以下の属性をしています。

  • strategy属性
  • sequence属性

下の例は、シーケンスで採番をするケースです。
strategy属性は、「GenerationType.SEQUENCE」を指定します。
sequence属性では、採番に使用されるシーケンスを指定します。

/**
 * 学校エンティティ
 */
@Entity
@Table(name="MST_SCHOOL")
public class School {

	@Id
	@GenerateValue(strategy=GenerationType.SEQUENCE, sequence="SEQ_MST_SCHOOL")
	@Column(name="ID")
	private int id;

	〜 フィールド定義など 〜
}

下の例では、オートインクリメントで採番をするケースです。
strategy属性は、「GenerationType.AUTO」を指定します。
このケースではsequence属性は指定しません。

/**
 * 学校エンティティ
 */
@Entity
@Table(name="mst_school")
public class School {

	@Id
	@GenerateValue(strategy=GenerationType.AUTO)
	@Column(name="id")
	private int id;

	〜 フィールド定義など 〜
}

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

×

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

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