Из статьи на хабре: Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить.
Мой код, проверка работы кэша.
@Entity
@Table(name = "okof")
public class Okof {
@Id
protected String code;
@Column(name = "name")
private String name;
public Okof() {
}
...
}
@Repository
public class JpaOkofRepositoryImpl implements OkofRepository {
@PersistenceContext
private EntityManager em;
@Override
public List<Okof> getOkofList() {
Okof o = em.find(Okof.class, "330.13.92.2");
System.out.println(o.getCode());
o = em.find(Okof.class, "330.13.92.2");
System.out.println(o.getCode());
// return em.createNamedQuery(Okof.ALL_SORTED, Okof.class).getResultList();
return null;
}
...
}
Тестируем:
public static void main(String[] args) {
try (GenericXmlApplicationContext appCtx = new GenericXmlApplicationContext()) {
appCtx.load("spring/spring-app.xml", "spring/spring-db.xml");
appCtx.refresh();
OkofRepository repository = appCtx.getBean(OkofRepository.class);
repository.getOkofList();
}
}
В консоле видим:
Hibernate:
select
okof0_.code as code1_1_0_,
okof0_.name as name2_1_0_,
okof0_.parent_code as parent_c3_1_0_
from
okof okof0_
where
okof0_.code=?
330.13.92.2
Hibernate:
select
okof0_.code as code1_1_0_,
okof0_.name as name2_1_0_,
okof0_.parent_code as parent_c3_1_0_
from
okof okof0_
where
okof0_.code=?
330.13.92.2
Почему запрос уходит в базу два раза? Получается что кэш почему-то не отрабатывает.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей