我们从一系列选择语句中创建视图
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()是否在某些条件下省略数据?
答案 0 :(得分:0)
用户JB Nizet,是正确的。
虽然视图已正确创建并包含所有表中包含的所有信息,但JPA的“查找全部”只会返回不同的实体列表。
在我的情况下,一些Id(虽然在自己的表中是唯一的)在视图中没有Unique,而在从视图中获取实体列表时正确且正确地正确地JPA它将忽略它找到的任何后续实体读取结果集时出现重复的ID。
我的修复是在View中创建自己唯一的ID字段。 findAll()然后检索所有内容,因为它没有任何具有重复Id的实体
答案 1 :(得分:-1)
我认为JPA中的findAll()方法没有返回数据的问题可能是因为数据库中的1-M映射。