JPA findAll()没有返回视图中的所有内容

时间:2016-07-22 11:32:43

标签: mysql hibernate jpa

我们从一系列选择语句中创建视图

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()方法返回View的内容时。它遗漏了一些数据。特别是它缺少MD_ALL组(这是代码中的第三个语句)

正确生成视图,因为正确显示了每个select语句的数据。只有在调用findAll()时,才会缺少选择'MD_ALL'的数据。

有趣的是,如果我交换MD_SELECTION和MD_ALL语句,MD_ALL将在findAll()调用中返回,而不是MD_SELECTION。

findAll()是否在某些条件下省略数据?

2 个答案:

答案 0 :(得分:0)

用户JB Nizet,是正确的。

虽然视图已正确创建并包含所有表中包含的所有信息,但JPA的“查找全部”只会返回不同的实体列表。

在我的情况下,一些Id(虽然在自己的表中是唯一的)在视图中没有Unique,而在从视图中获取实体列表时正确且正确地正确地JPA它将忽略它找到的任何后续实体读取结果集时出现重复的ID。

我的修复是在View中创建自己唯一的ID字段。 findAll()然后检索所有内容,因为它没有任何具有重复Id的实体

答案 1 :(得分:-1)

我认为JPA中的findAll()方法没有返回数据的问题可能是因为数据库中的1-M映射。