2014-03-31 63 views
0

我有主表和明細表
1-主-Employee(ID INT PRIMARY KEY,名字VARCHAR2,ADDRESS_ID INT外鍵)
2-詳情 - 地址(ID INT主鍵,塊VARCHAR2,建築VARCHAR2,面積VARCHAR2)

JPA如何讓某些字段不是所有的字段

我使用JPA獲取對象,我想某些領域不是全部,我想 (Employee.id,Employee.name,Address.area) 只有
所以我怎麼能沒有得到所有的領域呢?
謝謝。

+0

如果這兩個表之間沒有任何關係,那麼如果使用'createQuery'或'namedQuery',我認爲你需要得到兩個物體。或者你也可以使用'nativeQuery' – Yubaraj

+0

有一個關係,但是當我得到對象時,我得到所有的字段:( – Hazim

+0

是的,如果你返回對象,那麼你會得到所有的字段。所以最好的方法是使用'nativeQuery' – Yubaraj

回答

0

你確實,通過使用查詢:

select e.id, e.name, a.area from Employee e left join e.address a where ... 

這樣的查詢將返回一個List<Object[]>,其中每個對象數組包含三個選定的元素。

但是,通過只選擇那些字段,您可能不會獲得任何收益,因爲執行數據庫查詢時通常會花費的是查找數據以檢索和執行表之間的聯接。你最好繼續使用您的實體,並使用下面的查詢,而不是,它會返回員工的情況下,與已加載它們的地址:

select e from Employee e left join fetch e.address where ... 

這將返回一個List<Employee>

+0

謝謝B Nizet :),但結果是一樣的,結果得到所有字段 – Hazim

+0

你看過我的回答了嗎?它明確而清楚地解釋說,你只能檢索這3個字段(並顯示如何去做),但通常沒有用處,因爲這樣做沒有顯着的性能提升。 –

+0

謝謝澄清,但我的問題,因爲我有表包含3個字段包含5000多個varchar作爲超過3種語言的文本,所以我想只加載一個語言不是3種語言的字段。 – Hazim

0

我知道這有點晚了,但仍然想回答以防萬一有人可能會遇到這個問題:你有沒有考慮嘗試像懶惰和渴望的提取類型?有了這些,你可能會得到直接標記爲「渴望」的所有字段,「懶」字段被提取

相關問題