2011-04-01 74 views
3

我正在爲我的應用程序創建通用報告邏輯,並希望能夠運行任何查詢並解析響應。報告的輸入是使用EntityManager.createNativeQuery(查詢)運行的原生SQL查詢。JPA - 如何訪問查詢元數據?

我有這一切工作正常,但目前我還必須表明查詢響應返回「標題」。

例如,對於這個查詢:

SELECT name, email FROM users; 

我需要知道我取回從查詢的姓名和電子郵件。我從運行查詢得到的所有信息都是一個字符串數組列表。不知何故,我希望能夠找回這個特定查詢具有[「name」,「email」]的數組或列表。

我沒有看到一種方式來詢問Query對象來找出這些信息。我在迴應中也看不到有關這些數據的任何跡象。有沒有辦法在JPA中獲取這些數據?

具體來說,我使用的是EclipseLink。

謝謝。

+0

查找到的ResultSetMetaData – ChadNC 2011-04-01 18:11:40

+0

@ChadNC - 我將如何通過JPA獲取該對象的保持有關係嗎?我明白通過JDBC使用該對象,但不能通過JPA獲得該類對象的句柄。 – MikeTheReader 2011-04-01 18:24:08

+0

您使用jpa本機查詢而不是jdbc的原因是什麼? – 2011-04-01 18:34:23

回答

4

EclipseLink還允許本地查詢返回地圖而不是Object []。

使用「eclipselink.result-type」提示。

「eclipselink.result型」 =「地圖」

+0

這正是我所需要的。謝謝! – MikeTheReader 2011-04-04 14:49:35

0

下面的查詢從數據庫&中獲取必填字段使用相應的構造函數設置到對象中&返回對象列表。

SELECT NEW package_name.User(u.name,u.email) FROM User u; 

這將返回用戶的列表對象,而不是字符串數組,其中名&電子郵件字段設置&剩餘的字段被設置爲默認值。

您必須僅傳遞需要獲取的字段,但必須爲其提供構造函數。在這種情況下,對於User類,應該有字段名稱,電子郵件的構造函數。

在這裏,您不必記住字段名稱,只需使用訪問器(get)方法從對象中獲取所需的詳細信息即可。

+0

我覺得我的例子有點太簡單了。我將爲本節所做的大部分查詢將跨越多個實體。詹姆斯提出的暗示確實是我期待的那種事情。謝謝你的幫助。 – MikeTheReader 2011-04-04 14:52:00

0

使用AspectJ,您可以從查詢中獲取所需的信息。

+0

我可以看到工作。我們目前不使用面向方面的代碼,我不想僅僅爲此添加它,特別是因爲我已經有了一個工作解決方案。詹姆斯提出的暗示確實是我期待的那種事情。謝謝你的幫助。 – MikeTheReader 2011-04-04 14:53:38