2 つの ManyToOne 参照を持つ次の Parent クラスを考えてみましょう。
@Entity
@Table(name = "PARENT")
public class Parent {
private static final long serialVersionUID = 3730163805206219313L;
@Id
@SequenceGenerator(name = "SEQ#PARENT", sequenceName = "SEQ#PARENT", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ#PARENT")
@Column(name = "ID")
private long id;
@ManyToOne(optional = false, fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinColumn(name="CHILD_1_ID", referencedColumnName="FK_COLUMN_NAME")
private Child childInstance1;
@ManyToOne(optional = false, fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinColumn(name="CHILD_2_ID", referencedColumnName="FK_COLUMN_NAME")
private Child childInstance2;
@Column(name = "USER_ID")
private String userId;
}
次の hql クエリを使用して、親インスタンスをロードしています。
"from Parent p join fetch p.childInstance1 join fetch p.childInstance2 where p.userId = :userId"
これにより、常に hibernate が別個の SQL ステートメントを発行して、子インスタンス 1 行をロードし、フェッチ結合を実行することになります。
余分な sql ステートメントを回避するための助けをいただければ幸いです。