@Entity
@Table(name="user_details")
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class UserDetails {...}
Вышеприведенный код - это то, как я определил свой класс Entity, UserDetails, как cacheable
. Я также добавил две строки в hibernate.cfg.xml
:Спящий режим второго уровня - Программа не заканчивается
<!-- second-level cache -->
<property name="cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
В моей службе основного метода я доступ дважды один и то же UserDetails объект, в разных сеансах:
session = sessionFactory.openSession();
session.beginTransaction();
UserDetails user = new UserDetails();
user = (UserDetails)session.get(UserDetails.class, 3);
logger.info(user);
session.getTransaction().commit();
session.close();
Session session2 = sessionFactory.openSession();
session2.beginTransaction();
UserDetails user2 = new UserDetails();
user2 = (UserDetails)session2.get(UserDetails.class, 3);
logger.info(user2);
session2.getTransaction().commit();
session2.close();
я, как и следовало ожидать только один SELECT
запроса , что означает, что hibernate извлекает данные из кеша второго уровня. Я также хорошо печатаю свои объекты на консоли.
Но моя программа не заканчивается. Он сидит там, на Eclipse
, и я должен остановить его вручную. Я делаю что-то неправильно? Благодарю.
Большое спасибо. Хорошего дня. – yovan786