我在使用JPA创建的查询时遇到了困难。查询如下所示:
Query q = em.createQuery("SELECT tr FROM Trend tr JOIN tr.tweet tw WHERE tw.postDate > 'week ago' GROUP BY tr.trend ORDER BY COUNT(tr) DESC", Trend.class);
我正在创建一个类似于Twitter的应用程序。我想要的是过去一周的趋势列表。所有趋势都存储在单独的数据库表中。通过使用上述查询,我希望得到过去一周按发生顺序排序的所有趋势。但是,只返回一个趋势。
当我省略ORDER BY COUNT(tr)部分时,我确实找回了所有趋势。但是,这包括重复项,列表不按发生顺序排序。所以这不会返回我想要的结果。
这个(我的)SQL查询似乎有效:
SELECT tr.trend FROM Trends tr JOIN Tweets tw ON tw.id = tr.tweet_id WHERE tw.postDate > 'week ago' GROUP BY tr.trend ORDER BY COUNT(tr.trend) DESC
对我来说,这与上面的JPA查询相同,尽管结果完全不同。我也可以使用ORDER BY COUNT(*),但星号在JPA中不起作用。
请注意,对象的名称是“Trend”,而表名是“Trends”,Tweet / Tweets也是如此:所以这不是问题:)。此外,'周前'是一个正确的MySQL日期,非常适合。
希望任何人都可以帮助我的JPA查询以我想要的方式工作。提前谢谢!