Hibernate 是否会使用配置的二级 EhCache 来查找多个 ID

Will Hibernate use configured 2nd level EhCache with this lookup for multiple Ids

我正在使用 Hibernate 4.3.11

我已经为我的歌曲 class 配置了二级缓存,但点击率不高,我想知道是不是因为我通常按如下方式检索我的歌曲 Class。

 public static List<Song> getSongsFromDatabase(Session session, List<Integer> ids)
        {
            try
            {
                List<Song> songs = session
                        .createCriteria(Song.class)
                        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
                        .add(Restrictions.in("recNo", ids)).list();
                return songs;
            }
            catch (Exception e)
            {
                throw new RuntimeException(e);
            }
        }

这只是通过主键检索,但我是否有不同的方式来使用 Ehcache?

我认为它只有在我使用查找方法 Id 方法时才有效

public static Song getSongFromDatabase(Session session, Integer id)
    {
        try
        {
            return (Song) session.get(Song.class, id);
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }

这完全取决于您的二级缓存的配置方式。

如果一个实体被注释 @Cache,实际上,它将在 session.get 期间被缓存。

对于查询,您需要使其可缓存。这意味着在你的情况下做这样的事情:

List<Song> songs = session
  .createCriteria(Song.class)
  .setCacheable(true) // here
  .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
  .add(Restrictions.in("recNo", ids)).list();