【发布时间】:2016-07-22 11:32:43
【问题描述】:
我们从一系列选择语句创建一个视图
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 组(这是代码中的第三条语句)
视图生成正确,因为每个选择语句的数据都正确显示。只有在调用 findAll() 时,'MD_ALL' 的 select 数据才会丢失。
有趣的是,如果我交换 MD_SELECTION 和 MD_ALL 语句,MD_ALL 将在 findAll() 调用中返回,而不是 MD_SELECTION。
findAll() 在某些情况下会忽略数据吗?
【问题讨论】:
-
实体是如何定义的?它的 ID 是什么?您确定视图中的每一行都有不同的 ID?
-
ID 不明显。就像在 MD_Selection 和 MD_ALL 的 ID 中一样。 findAll() 会只返回不同的值吗?
-
那你就有答案了。实体由其 ID 标识。所以同一类型的两个不同实体可能没有相同的 ID
-
因此,即使从上述语句中正确创建了 DB 视图,即所有 4 个选择语句的所有值都出现在视图中。 findAll() 只会返回指定子集?
-
是的,您刚刚验证了它,不是吗?身份证必须是身份证。如果它不能识别实体,它就不再是 ID。