项目开发,使用HQL查询数据库,数据是有的,语句也正确,但是却没有查出预期的数据
产生疑问的HQL语句
SELECT
*
FROM
MMZW.READ_DOCUMENT readdocume0_,
MMZW.OADOCUMENT oadocument1_
WHERE
readdocume0_.DOCUMENT_ID=oadocument1_.ID
AND readdocume0_.ADD_USER_ID='ID'
AND
(
readdocume0_.FLOW_ID = '%11%'-- 这个没有执行
OR
oadocument1_.FLOWID LIKE '%11%'
)
解决问题的经过
1 刚开始怀疑HQL语句使用OR的问题,查找了有关资料,没找出语法错误,后来使用下面的语句排除了OR使用错误的原因
使用oadocument1_.FLOWID LIKE '%11%'可以查出数据
SELECT
*
FROM
MMZW.READ_DOCUMENT readdocume0_,
MMZW.OADOCUMENT oadocument1_
WHERE
readdocume0_.DOCUMENT_ID=oadocument1_.ID
AND readdocume0_.ADD_USER_ID='ID'
AND oadocument1_.FLOWID LIKE '%11%'
使用readdocume0_.FLOW_ID = '%11%'依然查询不出数据
SELECT
*
FROM
MMZW.READ_DOCUMENT readdocume0_,
MMZW.OADOCUMENT oadocument1_
WHERE
readdocume0_.DOCUMENT_ID=oadocument1_.ID
AND readdocume0_.ADD_USER_ID='ID'
AND readdocume0_.FLOW_ID = '%11%' -- 这个没有执行
2OR问题排除后,那么有可能是数据不存在
直接查询数据库,发现在没有关联的情况下,数据出现
SELECT
*
FROM
MMZW.READ_DOCUMENT readdocume0_
WHERE
readdocume0_.ADD_USER_ID='ID'
AND readdocume0_.FLOW_ID LIKE '%11%'
3使用关联的时候出问题,无关联的时候数据存在,那么有可能是两张表没有关联
查看了数据库结果,发现数据表关联没问题
4最后去查询了一下readdocume表的数据,发现问题根源
SELECT * FROM read_document WHERE document_id IS NULL
查询到大量document_id为null的数据,原来是因为readdocume0_.FLOW_ID LIKE '%11%'的数据的外键document_id都为null,导致了执行查询时 ,符合下面条件
WHERE
readdocume0_.DOCUMENT_ID=oadocument1_.ID
AND readdocume0_.ADD_USER_ID='ID'
的数据里,没有符合readdocume0_.FLOW_ID = '%11%'的数据【因为document_id为null了,所以符合readdocume0_.FLOW_ID = '%11%'的数据一开始就被排除开了】,于是就出现了数据存在,语句也正确,但是没有查出预期的结果的大头虾麻烦

在项目开发中遇到一个奇怪的问题,使用HQL进行数据库查询时,虽然语句正确且数据存在,但结果为空。经过一系列排查,首先怀疑是HQL的OR操作问题,通过不同查询验证排除了这一可能性。接着检查数据是否存在,发现无关联时数据能显示。进一步查看数据库关联关系,确认关联表没有问题。最终发现,查询条件涉及的外键`document_id`存在大量null值,导致符合其他条件的数据在关联时因`document_id`为null被排除在外,从而未返回预期结果。
1679

被折叠的 条评论
为什么被折叠?



