2011-06-27 18 views
0

私は実装として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選択クエリを避けるためにとにかくありますか?ありがとう。

+0

*実際には何をしようとしていますか?英語で(コードなし)? – Bohemian

+0

usrGrpコレクションでUsrのリストを取得しようとしました。 sqlは実際にそれを達成しますが、Hibernateによって生成されたGrpの特別な選択クエリを使用します。私が100 Grpを持っていれば、Hibernateはgrp0_.grp_idとしてgrp1_6_0_をgrp0_grp_id = grp0_.grp_idから生成します。 100回。 – Claire

答えて

0

はい。あなたは怠惰から熱心にフェッチモードを変更することができます:usrgrpはUsr.classでセットがある

Criteria crit = session.createCriteria(Usr.class) 
          .setFetchMode("usrgrp", FetchMode.JOIN) 

+0

ありがとうございますが、JPA Annotationのサンプルがありますか? – Claire

0

これらのクエリは、それぞれがUsrGrpのフェッチされたgrpをロードするために実行されます。 ManyToOneをUsrGrpからGrpに怠惰にマークしてください。これらのクエリは消えます。

SELECT DISTINCT usr FROM Usr usr 
LEFT JOIN FETCH usr.usrGrpList userGroup 
LEFT JOIN FETCH userGroup.grp grp 

ます。また、クエリの数を減らすためにbatch fetchingを有効かもしれません:または、あなたが同じクエリ内のグループをロードしたい場合、あなたは左を追加することができ、クエリにフェッチ参加。

PS:母音はクールです。 UserGroupはUsrGrpよりはるかに読みやすくなります

+0

解決済みです。皆さん、ありがとうございました!! – Claire

関連する問題