エンティティクラスは、SimpleORM4JでリレーショナルデータベースのROWデータを格納するクラスとなります。
また、エンティティクラスには以下のアノテーションを記述して、データベーステーブルとの関連付けを行う必要があります。
SimpleORM4Jはエンティティクラスに記述された各アノテーションに従って、データベースデータのマッピングを実行します。
SimpleORM4Jで、マッピングクラスとなる「エンティティ」と認識されるためには、
@Entityアノテーションをクラスに記述します。
例としては以下のようになります。
下の例では、Schoolクラスはデータのマッピングクラスであるエンティティとして認識されます。
Entityアノテーションを記述しない場合は、エンティティとして認識されず、データのマッピングは実行されません。
/** * 学校エンティティ */ @Entity @Table(name="mst_school") public class School { 〜 フィールド定義など 〜 }
各エンティティに対応するテーブルを定義するのがTableアノテーションです。
SimpleORM4Jでは、Criteria#fromメソッドのパラメータとされたエンティティのTableアノテーションに定義されたテーブル名を確認して、検索等の処理を実行しています。
Tableアノテーションが定義されていない場合は、エンティティクラス名がテーブル名として使用されます。
例としては以下のようになります。
下の例では、「criteria.from(School.class)」という処理を記述した際に、Tableアノテーションのname属性に指定された「mst_school」テーブルに対して、検索処理や削除処理が実行されます。
/** * 学校エンティティ */ @Entity @Table(name="mst_school") public class School { 〜 フィールド定義など 〜 }
エンティティクラスの各フィールドがどのカラムに対応するかを定義するのが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アノーテーションです。
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アノテーションが定義されているフィールドは、EntityManager#persist(INSERT)でオブジェクトの値が登録されずに、データベース側で採番がされます。
GenerateValueアノテーションには採番の種別に応じて以下の属性をしています。
下の例は、シーケンスで採番をするケースです。
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を改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが
出来ない場合がございます。何卒ご容赦ください。
タイトル※ | |
---|---|
メールアドレス | |
内容※ |