したがって、特定のエンティティのインスタンスを ID ごとに取得しています。
for(Integer songId:songGroup.getSongIds()) {
session = HibernateUtil.getSession();
Song song = (Song) session.get(Song.class,id);
processSong(song);
}
これにより、ID ごとに SQL クエリが生成されるため、これを 1 回で実行する必要があると思いましたが、クエリを実行する以外に、1 回の呼び出しで複数のエンティティを取得する方法が見つかりませんでした。だから私はクエリを書きました
return (List) session.createCriteria(Song.class)
.add(Restrictions.in("id",ids)).list();
ただし、第 2 レベルのキャッシュを有効にしても、古いメソッドが第 2 レベルのキャッシュからオブジェクトを返すことができるというわけではありません (以前に要求されていた場合) が、クエリは常にデータベースに送信されます。
これを行う正しい方法は何ですか?