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();
我正在使用 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();