public interface PromotionServiceXrefRepository extends PagingAndSortingRepository<PromotionServiceXref, Integer> {
@Query("SELECT psx FROM Customer c " +
"JOIN c.customerProductPromotions cpp " +
"JOIN cpp.productPromotion pp " +
"JOIN pp.promotion p JOIN p.promotionServiceXrefs psx " +
"WHERE c.sonosId = ?1")
@QueryHints(@QueryHint(name = "org.hibernate.cacheable", value = "true"))
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY, region = "promotionServiceXrefByCustomerId")
Set<PromotionServiceXref> findByCustomerId(int customerId);
}
我的猜测是,除非对表进行修改(更新,插入,删除),否则Hibernate不会将时间戳放入“默认上的更高 - timestamps-grigion”中。因此,最初,该区域是空的,只读的表格永远不会时间戳。反过来,这意味着查询缓存将无法与这些实体一起使用,因为它无法判断该表是否已更新(没有时间戳)。
理论上,您可以尝试在启动时使用类似的东西预先填充该地区: