我有一个DAO方法,它执行以下查询来获取结果:
SELECT new com.Person() FROM Person AS person
WHERE (person.start <= now()) AND (person.expires > now()) ORDER BY person.start ASC
以上是PostgreSQL查询。如何在上面启用查询缓存?如果我只做query.setQueryCache(true)
,那就不行了,因为每次执行上面的时候,now()都会有所不同。是否有最佳实践来实现此类功能?
答案 0 :(得分:1)
基本上你应该使用离散值而不是直接使用now()的值,它总是一个新值,并且与我听说的任何缓存策略不兼容:)。
所以说你实际上每15分钟就要缓存一次数据。 您基本上必须将now()的值置于最接近的四分之一小时,而是使用SQL查询中的floored值。
您可以在堆栈上查看这篇文章,以实现这样的事情How to round time to the nearest quarter hour in java?