项目开发,使用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%'的数据一开始就被排除开了】,于是就出现了数据存在,语句也正确,但是没有查出预期的结果的大头虾麻烦