jpaについてのメモがき。
refs
・wiki(jpa)
・JPA 2.0入門
・EJB3.0 の勉強 (8) Java Persistence API (JPA) を使ってみる。 (9)(10)もjpaについての内容
javax.persistenceパッケージはinterface。実装はhibernate,ebeanとか・・・かな?
■@OneToMany、@ManyToOne
外部リレーションについて。Oneが所有者側のentity,Manyが被所有者側のentity。
下にサンプル。ModelはなんかのORMのクラス。ebean,hibernateとか。
・所有者側のソース
public class ClassA extends Model {
~
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "classAObj")
public List<HiClassB> employeeGroups = new ArrayList<HiClassB>();
~
}
・被所有者側のソース
public class HiClassB extends Model {
~
@ManyToOne
@JoinColumn(name = "hoge_id")
public ClassA classAObj;
~
}
■eagerとlazyについて
上の(fetch = FetchType.EAGER
refs:LAZY フェッチ/EAGER フェッチ
全ての永続化フィールドに対して、Entity 生成時に読む込む(EAGER フェッチ)かアクセスする際に初めて読み込む(LAZY フェッチ)かを指定できます。指定しない場合、以下のアノテーションが指定されたフィールドは LAZY フェッチがデフォルトとなります。
@OneToMany (1 対多の関連を表すフィールドに付ける)
@ManyToMany (多対多の関連を表すフィールドに付ける)
それ以外は EAGER フェッチがデフォルトです。本ページのサンプルコードでは全てのフィールドが EAGER フェッチとなります。フェッチタイプを明示的に指定する場合は、以下の様に指定します。
だそう・・・
■@OneToMangeのmappedBy属性
refs:2.6.3 OneToMange /
また,双方向の関係にする場合は,非所有者側に必ずmappedBy属性を指定してください。
mappedBy 任意 被所有者側のエンティティクラスの要素に付与し,所有者側のエンティティクラスで関係を保持しているフィールドまたはプロパティの名前を指定する属性です。
説明
被所有者側のエンティティクラスの要素に付与し,所有者側のエンティティクラスで関係を保持しているフィールドまたはプロパティの名前を指定する属性です。
この属性を指定した場合,関係は双方向になります。
だそう・・・
refs
・wiki(jpa)
・JPA 2.0入門
・EJB3.0 の勉強 (8) Java Persistence API (JPA) を使ってみる。 (9)(10)もjpaについての内容
javax.persistenceパッケージはinterface。実装はhibernate,ebeanとか・・・かな?
■@OneToMany、@ManyToOne
外部リレーションについて。Oneが所有者側のentity,Manyが被所有者側のentity。
下にサンプル。ModelはなんかのORMのクラス。ebean,hibernateとか。
・所有者側のソース
public class ClassA extends Model {
~
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "classAObj")
public List<HiClassB> employeeGroups = new ArrayList<HiClassB>();
~
}
・被所有者側のソース
public class HiClassB extends Model {
~
@ManyToOne
@JoinColumn(name = "hoge_id")
public ClassA classAObj;
~
}
■eagerとlazyについて
上の(fetch = FetchType.EAGER
refs:LAZY フェッチ/EAGER フェッチ
全ての永続化フィールドに対して、Entity 生成時に読む込む(EAGER フェッチ)かアクセスする際に初めて読み込む(LAZY フェッチ)かを指定できます。指定しない場合、以下のアノテーションが指定されたフィールドは LAZY フェッチがデフォルトとなります。
@OneToMany (1 対多の関連を表すフィールドに付ける)
@ManyToMany (多対多の関連を表すフィールドに付ける)
それ以外は EAGER フェッチがデフォルトです。本ページのサンプルコードでは全てのフィールドが EAGER フェッチとなります。フェッチタイプを明示的に指定する場合は、以下の様に指定します。
だそう・・・
■@OneToMangeのmappedBy属性
refs:2.6.3 OneToMange /
また,双方向の関係にする場合は,非所有者側に必ずmappedBy属性を指定してください。
mappedBy 任意 被所有者側のエンティティクラスの要素に付与し,所有者側のエンティティクラスで関係を保持しているフィールドまたはプロパティの名前を指定する属性です。
説明
被所有者側のエンティティクラスの要素に付与し,所有者側のエンティティクラスで関係を保持しているフィールドまたはプロパティの名前を指定する属性です。
この属性を指定した場合,関係は双方向になります。
だそう・・・