开发日志:HQL关联查询出现语句正确,但一直查询不出结果的问题

来源:互联网 发布:python如何扩充字典 编辑:程序博客网 时间:2024/05/02 04:47

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