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))