Hibernate — почему не работает кэш первого уровня?

195
21 декабря 2018, 02:40

Из статьи на хабре: Кеш первого уровня всегда привязан к объекту сессии. 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

Почему запрос уходит в базу два раза? Получается что кэш почему-то не отрабатывает.

READ ALSO
Как не выгружать из памяти неактивные Fragment?

Как не выгружать из памяти неактивные Fragment?

Часть из MainActivity для загрузки Fragment's:

213
Элемент Toolbar-a с счётчиком

Элемент Toolbar-a с счётчиком

Делаю кнопку toolbar-a с счётчиком, но когда я налаживаю на элемент свое поле в меню, при помощи:

210
Как выбрать элемент по тексту?

Как выбрать элемент по тексту?

Внутри div есть label с текстомНадо выбрать этот div

227