在休眠中按 id 高效加载多个实体
2022-09-03 02:40:20
因此,我通过id获取了特定实体的许多实例:
for(Integer songId:songGroup.getSongIds()) {
session = HibernateUtil.getSession();
Song song = (Song) session.get(Song.class,id);
processSong(song);
}
这将为每个 ID 生成一个 SQL 查询,因此我突然想到我应该在一个 ID 中执行此操作,但是除了运行查询之外,我找不到在一次调用中获取多个实体的方法。所以我写了一个查询
return (List) session.createCriteria(Song.class)
.add(Restrictions.in("id",ids)).list();
但是,如果我启用第二级缓存,这并不意味着我的旧方法能够从第二级缓存返回对象(如果之前已请求过它们),但我的查询将始终转到数据库。
正确的方法是什么?