lazy = "true"
の指定とfetch = "select" or "join"
の使用の違いは何ですか?どちらが他よりも優先されますか?
よろしく
次のようなエンティティがあるとします。
_@Entity
@Table
public class Parent {
@Id
private Long id;
@OneToMany(mappedBy="parent", fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
private List<Child> child;
//getter setters
}
@Entity
@Table
public class Child {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
//getter setter
}
_
上記の例では、Parent
エンティティを取得すると、hibernateは自動的にすべてのchild
エンティティをjoinを使用して積極的にロードします。一方、Child
をフェッチすると、コードで明示的に呼び出す場合を除いて、Parent
エンティティは選択されませんchild.getParent()
。
FetchType(Lazy/Eager)は、コードに呼び出しがある場合に、エンティティを積極的にロードするか、レイジーにロードするかを示します。
FetchMode(Select/Join)は、追加のselectを使用してエンティティをロードするか、joinまたはsubselectを使用した1つのクエリでエンティティをロードするかを示します。
FetchMode:定義しますhow
hibernate(どの戦略、たとえばJoin、SubQueryなどを使用)がデータベースからデータをフェッチします。
FetchType:定義しますwhether
hibernateはデータを取得するかどうかを指定します。
[〜#〜] note [〜#〜]:FetchMode
は、FetchType = EAGER
注釈中。