我正在使用HQL从21天开始准确插入数据。这是我的代码
Query queryThreeWeek = session.createQuery("from Users where createdDate = CURDATE()-21");
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();
我无法使用createSQLQuery
。
现在我没有收到任何数据,但有日期2016-06-20
的数据。这是因为月份发生了变化,因为当我使用CURDATE()-7
时,我得到了日期2016-07-04
的正确数据。
dat的计算就像是;
2016-07-11 - 7 = 20160704
2016-07-11 - 21 = 20160690
我还使用INTERVAL
的{{1}}累了。以下是我在HQL中使用native sqlQuery
的代码:
INTERVAL
也试过
Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE( DATE_SUB( NOW() , INTERVAL 21 DAY ) )");
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();
但它给了我例外情况:Query queryThreeWeek = session.createQuery("from Users where createdDate = DATE( DATE_SUB( CURDATE() , INTERVAL 21 DAY ) )");
List<Users> userDetailsThreeWeekList = queryThreeWeek.list();
。
那么我可以使用什么而不是减去这样的一天:org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: 21
?仅在HQL中
答案 0 :(得分:1)
您可以使用date_Sub
"from Users where createdDate = DATE( DATE_SUB( NOW() , INTERVAL 21 DAY ) )"
答案 1 :(得分:1)
我已经通过使用一个本机SQL查询解决了这个问题,它可以让我得到确切的日期。
halted
然后我在HQL查询中使用这些数据,如下所示:
Query sub3Week = session.createSQLQuery("select DATE( DATE_SUB( CURDATE() , INTERVAL 21 DAY ) ) from dual");
List<Date> sub3WeekList = sub3Week.list();
答案 2 :(得分:1)
具有HQL的解决方案非常简单:
final long time = System.currentTimeMillis() - java.time.Duration.ofDays(21).toMillis();
final javax.persistence.Query query = entityManagerOrSession.createQuery(
"SELECT x FROM users x WHERE x.createddate> :time");
query.setParameter("time", new java.sql.Timestamp(time));