2016-07-22 29 views
0

沒有返回的一切,我們從一系列的select語句JPA的findAll()在視圖

SELECT d.DLVRB_CD AS ID, 
    'DL_GROUP' AS GRP, 
    d.DLVRB_NM AS VALU, 
    NULL AS DFLT_VALU, 
    NULL AS DN 
FROM DLVRB d 

UNION ALL 

SELECT m.MODF_CD AS ID, 
    'MD_SELECTION' AS GRP, 
    m.MODF_NM AS VALU, 
    NULL AS DFLT_VALU, 
    m.MODF_DN AS DN 
FROM MODF m 

UNION ALL 

SELECT m.MODF_CD AS ID, 
    'MD_ALL' AS GRP, 
    m.MODF_NM AS VALU, 
    NULL AS DFLT_VALU, 
    m.MODF_DN AS DN 
FROM MODF m 

UNION ALL 

SELECT v.VAR_CD AS ID, 
    'VA_GROUP' AS GRP, 
    v.VAR_NM AS VALU, 
    v.VAR_DFLT_QT AS DFLT_VALU, 
    NULL AS DN 
FROM VAR v 

,當我們嘗試使用JPA的findAll()方法返回查看的內容後來的創建視圖。它缺少一些數據。特別是缺少MD_ALL組(這是代碼中的第三條語句)

正確生成視圖,因爲在每個select語句的數據中都正確顯示。只有在調用findAll()時,纔會選擇'MD_ALL'的數據。

有趣的是,如果我交換MD_SELECTION和MD_ALL語句,MD_ALL將在findAll()調用中返回,而不是在MD_SELECTION中返回。

findAll()在某些條件下省略數據嗎?

+1

如何定義實體?它的ID是什麼?你確定視圖中的每一行都有不同的ID嗎? –

+0

該Id的不明顯沒有。正如在MD_Selection和MD_ALL的ID一樣。 findAll()只會返回不同的值嗎? – Newmanater

+0

然後你有你的答案。實體由其ID標識。因此,相同類型的兩個不同實體可能沒有相同的ID –

回答

0

User JB Nizet,對。

雖然視圖已正確創建幷包含所有表中包含的所有信息,但JPA的Find all只會返回一個不同的實體列表。

在我的情況下,一些Id的(雖然在那裏有獨特的表)獨特的一旦在視圖和JPA中合併,當從視圖中獲取實體列表時,它將忽略它發現的任何後續實體讀取結果集時使用重複ID。

在我的情況下,修復是在視圖中創建自己唯一的ID字段。 findAll()然後檢索所有事物,因爲它沒有任何具有重複Id的實體

-1

我認爲JPA中的findAll()方法沒有返回數據的問題可能是因爲數據庫中有1-M映射。

+0

嗨,感謝您的回答,我自己添加了答案,我從來沒有想過要添加一個答案。 – Newmanater