2012-04-17 52 views
0

在試圖找回通過外鍵鏈接到表的集合之後,我剛剛意識到我鏈接的表實際上是將表與其他表的鏈接到實際表數據(爲規格化表填充一個)。使用鏈接表返回集合和JPA

我仍然在努力從具有外鍵引用的ManyToOne批註變量中獲取集合,但是有沒有辦法從實際包含信息的表中取回數據?有沒有人遇到過這種情況?

更新:由於每個請求我將張貼一些代碼實例。這將是我會調用實體我命名查詢...

@NamedQuery(name="getQuickLaunchWithCollections", query = "SELECT q FROM QuickLaunch q LEFT JOIN FETCH q.quickLaunchDistlistCollection LEFT JOIN FETCH q.quickLaunchPermCollection LEFT JOIN FETCH q.quickLaunchProviderCollection")}) 

這將是收藏,我我正在尋找填充...

@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER) 
private List<QuickLaunchPerm> quickLaunchPermCollection; 

@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER) 
private List<QuickLaunchProvider> quickLaunchProviderCollection; 

@OneToMany(mappedBy="quickLaunchId", fetch=FetchType.EAGER) 
private List<QuickLaunchDistlist> quickLaunchDistlistCollection; 

正如你所看到的,我的提取類型設置爲渴望。所以從技術上講,我應該收回一些數據呢?但實際上,這些僅僅是將表格實際上想要退回的數據鏈接起來。我需要弄清楚如何最終獲取這些數據。

這是我如何調用該命名的查詢......

listQL = emf.createNamedQuery("getQuickLaunchWithCollections").getResultList(); 

好吧,看來好像LEFT JOIN FETCH
導致我的運行時拋出一些類型的expception。關於它是什麼還不清楚。但我感覺好像我沒有得到那種技術。我會嘗試一些稍微不同的東西。

+2

聽起來並不難。但發佈你的實體和代碼,不能做你想做的事情。 – barsju 2012-04-17 13:28:22

回答

1

我會建議簡化示例,以面對問題,因爲你現在正在全球範圍內。

指定mappedBy="quickLaunchId"屬性,您的意思是,QuickLaunchPerm實體具有QuickLaunch作爲其屬性,名稱爲"quickLaunchId"。這是真的?

如果不是,那麼你需要在QuickLaunchPerm來定義它:

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "QUICK_LAUNCH_ID") 
private QuickLaunch quickLaunchId; 

//getters setters 
+0

這的確是真的。 – SoftwareSavant 2012-04-17 14:59:36

+0

如果答案是正確的,你可以接受是一個正確的答案:) Happy2help。 – JMelnik 2012-04-17 15:08:39