私は実装としてHibernate3と共にJPAを使用しています。私が実行すると、私は関連テーブルUsrGrpJPA join fetch associationテーブルは、Hibernateによって生成されたN select?
Usr.java
@Id
@Basic(optional = false)
@Column(name = "usr_id")
private String usrId;
@OneToMany(mappedBy = "usr")
private List<UsrGrp> usrGrpList;
UsrGrp.java
@EmbeddedId
protected UsrGrpPK usrGrpPK;
@Column(name = "updated_by")
private String updatedBy;
@Column(name = "updated_date")
@Temporal(TemporalType.TIMESTAMP)
private Date updatedDate;
@JoinColumn(name = "grp_id", referencedColumnName = "grp_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Grp grp;
@JoinColumn(name = "usr_id", referencedColumnName = "usr_id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Usr usr;
Grp.java
@Id
@Basic(optional = false)
@Column(name = "grp_id")
@OneToMany(mappedBy = "grp")
private List<UsrGrp> usrGrpList;
(Usrの)1 -------- *(UsrGrp)* -------- 1(GRP)
を有しますSQLに続いて。
SELECT DISTINCT usr FROM Usr usr LEFT JOIN FETCH usr.usrGrpList
Hibernateは実際にGrpの番号と同じ量の選択クエリを実行します。
select grp0_.grp_id as grp1_6_0_ from grp grp0_ where grp0_.grp_id=?
select grp0_.grp_id as grp1_6_0_ from grp grp0_ where grp0_.grp_id=?
...
このN選択クエリを避けるためにとにかくありますか?ありがとう。
*実際には何をしようとしていますか?英語で(コードなし)? – Bohemian
usrGrpコレクションでUsrのリストを取得しようとしました。 sqlは実際にそれを達成しますが、Hibernateによって生成されたGrpの特別な選択クエリを使用します。私が100 Grpを持っていれば、Hibernateはgrp0_.grp_idとしてgrp1_6_0_をgrp0_grp_id = grp0_.grp_idから生成します。 100回。 – Claire