Является объектом в кэше первого уровня

#hibernate #nhibernate #caching

#спящий режим #nhibernate #кэширование

Вопрос:

Как я могу узнать, находится ли определенный HibernateProxy объект в кэше первого уровня?

Код примерно

 for (HibernateObject obj : objects) {
    if (HibernateUtils.isHibernateProxyInCache(
        obj.getExpensiveLazyObject())
    ) {
        display(obj.getExpensiveLazyObject());
    } else {
        display("click here to see expensive lazy object");
    }
}
 

мне нужен код HibernateUtils.isHibernateProxyInCache , но я не знаю, как его реализовать.

Ответ №1:

Я думаю, вы ищете Hibernate.isPropertyInitialized .

Вызов HibernateUtils.isHibernateProxyInCache(obj.getExpensiveLazyObject()) инициализирует прокси для дорогостоящего ленивого объекта, поэтому ваш метод всегда будет возвращать true .

Комментарии:

1. вы хотите сказать, что простой вызов getX инициализирует прокси? Не могли бы вы дать мне ссылку на часть документации, в которой говорится об этом? Итак, если я вас правильно понял, мне нужно сделать Hibernate.isPropertyInitialized(obj,"expensiveLazyObject") , верно?

2. Извините, я неправильно понял. Вероятно, вам просто нужен спящий режим. Инициализируется (obj.getExpensiveLazyObject()).

3. Спасибо. Но я не уверен, что понимаю, что означает «инициализированный». Можете ли вы сослаться на документы? Я не уверен, что «инициализированный» означает «в кэше первого уровня».

4. инициализированный означает: «прокси был инициализирован». Изначально прокси для объекта содержит только идентификатор объекта. Как только вы вызываете любой метод для прокси-объекта, он сначала загружает фактический экземпляр объекта со всеми его полями из базы данных, а затем делегирует этому экземпляру объекта выполнение метода. Инициализированный означает «состояние объекта загружено из базы данных». Если прокси-сервер все еще подключен к сеансу гибернации, то инициализированный прокси-сервер должен быть в кэше. Если это не то, что вам нужно, тогда, пожалуйста, уточните и посмотрите на метод, содержащийся в сеансе.