2017-05-29 10 views
0

@OneToMany関係にいくつか問題があります。 最初のエンティティは何らかの種類の商品を表します。私は「AR_GROUPリストから選択リスト」のような選択作るときHibernate @OneToMany関係

@Entity(name = "ARTIQULE") 
public final class ArtiquleEntity extends CustomEntity{ 

@Id 
@Column(name = "ID") 
public Long id; 

@NotNull 
@Column(name = "METRIC_ID") 
public Long metricId; 

@NotNull 
@Column(name = "STATUS_ID") 
public Long statusId; 

@NotNull 
@Column(name = "NAME") 
public String name; 

@NotNull 
@Column(name = "SHORT_NAME") 
public String shortName; 

@NotNull 
@ManyToOne 
@JoinColumn(name = "GROUP_ID") 
public ArtGroupEntity artGroup; 
} 

第二には、商品

@Entity(name = "AR_GROUP") 
public final class ArtGroupEntity extends CustomEntity { 

@Id 
@Column(name = "ID") 
public Long id; 

@NotNull 
@Column(name = "GROUP_ID") 
public Long groupId; 

@NotNull 
@Column(name = "STATUS_ID") 
public Long statusId; 

@NotNull 
@Column(name = "NAME") 
public String name; 

@NotNull 
@Column(name = "L") 
public Integer left; 

@NotNull 
@Column(name = "R") 
public Integer right; 

@NotNull 
@OneToMany(mappedBy = "artGroup", fetch = FetchType.EAGER) 
public List<ArtiquleEntity> artiquleEntities; 
} 

のグループ化されています。 グループごとにHibernateが選択を作成し、なぜ外部結合を使用しないのですか? または可能ではありません。

Hibernate: select artgroupen0_.ID as ID1_0_, artgroupen0_.GROUP_ID as GROUP_ID2_0_, artgroupen0_.L as L3_0_, artgroupen0_.NAME as NAME4_0_, artgroupen0_.R as R5_0_, artgroupen0_.STATUS_ID as STATUS_I6_0_ from AR_GROUP artgroupen0_ 
Hibernate: select artiquleen0_.GROUP_ID as GROUP_ID2_1_0_, artiquleen0_.ID as ID1_1_0_, artiquleen0_.ID as ID1_1_1_, artiquleen0_.GROUP_ID as GROUP_ID2_1_1_, artiquleen0_.METRIC_ID as METRIC_I3_1_1_, artiquleen0_.NAME as NAME4_1_1_, artiquleen0_.SHORT_NAME as SHORT_NA5_1_1_, artiquleen0_.STATUS_ID as STATUS_I6_1_1_ from ARTIQULE artiquleen0_ where artiquleen0_.GROUP_ID=? 
Hibernate: select artiquleen0_.GROUP_ID as GROUP_ID2_1_0_, artiquleen0_.ID as ID1_1_0_, artiquleen0_.ID as ID1_1_1_, artiquleen0_.GROUP_ID as GROUP_ID2_1_1_, artiquleen0_.METRIC_ID as METRIC_I3_1_1_, artiquleen0_.NAME as NAME4_1_1_, artiquleen0_.SHORT_NAME as SHORT_NA5_1_1_, artiquleen0_.STATUS_ID as STATUS_I6_1_1_ from ARTIQULE artiquleen0_ where artiquleen0_.GROUP_ID=? 
Hibernate: select artiquleen0_.GROUP_ID as GROUP_ID2_1_0_, artiquleen0_.ID as ID1_1_0_, artiquleen0_.ID as ID1_1_1_, artiquleen0_.GROUP_ID as GROUP_ID2_1_1_, artiquleen0_.METRIC_ID as METRIC_I3_1_1_, artiquleen0_.NAME as NAME4_1_1_, artiquleen0_.SHORT_NAME as SHORT_NA5_1_1_, artiquleen0_.STATUS_ID as STATUS_I6_1_1_ from ARTIQULE artiquleen0_ where artiquleen0_.GROUP_ID=? 

お返事ありがとうございます。

+0

のように私のオプションを選択一見に私は問題が選択を実行した後に行わなければならないORマッピングになると思うが、 '変更 – Jens

+0

@ ManyToOne'para '@ManyToOne(optional = false)'と何が起こるかを確認 – Dherik

答えて

0

複数の実行中のクエリは、n + 1の問題が原因である可能性があります。

JOIN FETCHを使用すると、親クエリとすべてのマップされた子エンティティを1つのクエリでフェッチできます。

チェックアウトthis同様の答え。 HQLフェッチ結合を使用することによって解決

+0

ありがとう、それは問題を解決しました。 – Dima

+0

助けがあれば、この回答に返金してください。また、それは受け入れられたとマークされ、後で他の人によって拾われることができます。 –

0

問題、 この

from AR_GROUP list left outer join fetch list.artiqules 
関連する問題