2017-05-29 91 views
0

@OneToMany關係存在一些問題。 第一個實體代表某種商品。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; 
} 

的分組當我做像「選擇AR_GROUP名單列表」一選擇。 Hibernate爲每個組創建一個select,爲什麼不使用outer join? 或者這是不可能的。

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可以在一個查詢中獲取父級和所有映射的子實體。

結賬this類似答覆。

+0

謝謝,它解決了一個問題。 – Dima

+0

如果這個答案對你有幫助,請給予應有的分數。同樣,它被標記爲被接受,並且可以稍後被其他人接收。 –

0

問題通過使用HQL解決加入我的選項選擇這個樣子的

from AR_GROUP list left outer join fetch list.artiqules