Java Hql查询与工作台中的MySQL查询不同

Java Hql查询与工作台中的MySQL查询不同,java,mysql,sql,spring,hibernate,Java,Mysql,Sql,Spring,Hibernate,我有这样一个疑问: String hql ="FROM Appointment A WHERE " +"(UNIX_TIMESTAMP(A.dateOfFirst) <= "+time+" AND ( (A.dateOfLast IS NULL) OR (UNIX_TIMESTAMP(A.dateOfLast) >= "+time+")))" +"AND( "+time+" < UNIX_TIMESTAMP(A

我有这样一个疑问:

String hql ="FROM Appointment A WHERE " 
                +"(UNIX_TIMESTAMP(A.dateOfFirst) <= "+time+" AND ( (A.dateOfLast IS NULL) OR (UNIX_TIMESTAMP(A.dateOfLast) >= "+time+")))" 
                +"AND( "+time+" < UNIX_TIMESTAMP(A.dateOfFirst)+86400 OR" // Jeśli data jest datą początkową 
                +"(DAYOFMONTH(A.dateOfFirst) = "+day+" AND A.MontRepetition = TRUE) " miesiąca
                +" OR (  MOD( "+time/86400+"- (to_days(A.dateOfFirst)-719528) , A.repetition) =0 ) "
            +")";
但事实并非如此

当我仅尝试此部分时:

     FROM Appointment A WHERE UNIX_TIMESTAMP(A.dateOfFirst) <= 1442141610 
AND ( (A.dateOfLast IS NULL) OR (UNIX_TIMESTAMP(A.dateOfLast) >= 1442141610) )
它也不返回此列

但在MySQL Workbench中,此SQL:

SELECT * FROM calendar.appointments WHERE (UNIX_TIMESTAMP(date_of_first) <= 1442141610 AND ( date_of_last IS NULL OR UNIX_TIMESTAMP(date_of_last) > 1442141610))
返回该列


我现在不明白为什么这个hql只返回DateOfLast中为null的行,并研究Hibernate基于hql查询创建的SQL查询。还有两点:尽量避免使用字符串连接将查询拼凑在一起,这会造成混乱、容易出错并可能导致安全问题,请改用参数化查询。其次,查询返回一个或多个记录,每个记录由列组成。顺便说一句,将变量串联到SQL/HQL/JPQL查询中很可能会出现SQL注入漏洞。避免使用它,并始终通过参数将变量传递到JPA/Hibernate/PreparedStatement API中
     FROM Appointment A WHERE UNIX_TIMESTAMP(A.dateOfFirst) <= 1442141610 
AND ( (A.dateOfLast IS NULL) OR (UNIX_TIMESTAMP(A.dateOfLast) >= 1442141610) )
SELECT * FROM calendar.appointments WHERE (UNIX_TIMESTAMP(date_of_first) <= 1442141610 AND ( date_of_last IS NULL OR UNIX_TIMESTAMP(date_of_last) > 1442141610))