Из документации:
Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить.
Мой код.
@Entity
@Table(name = "okof")
public class Okof {
@Id
protected Integer id;
@Column(name = "name")
private String name;
public Okof() {
}
...
}
@Repository
public class JpaOkofRepositoryImpl implements OkofRepository {
@PersistenceContext
private EntityManager em;
@Override
public List<Okof> getOkofList() {
return em.createQuery("SELECT o FROM Okof o ORDER BY o.code").getResultList();
}
...
}
Тестируем:
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();
repository.getOkofList();
}
}
В консоле видим:
Hibernate:
/* SELECT
o
FROM
Okof o
ORDER BY
o.code */ select
okof0_.code as code1_1_,
okof0_.name as name2_1_
from
okof okof0_
order by
okof0_.code
Hibernate:
/* SELECT
o
FROM
Okof o
ORDER BY
o.code */ select
okof0_.code as code1_1_,
okof0_.name as name2_1_
from
okof okof0_
order by
okof0_.code
Т.е. два раза вызвал метод с запросом - и два раза запрос ушел в базу, хотя должен был один.
Что я не догоняю?
Спасибо.