Java 休眠二级缓存-程序不终止

Java 休眠二级缓存-程序不终止,java,mysql,hibernate,second-level-cache,Java,Mysql,Hibernate,Second Level Cache,上面的代码是我如何将实体类UserDetails定义为cacheable。我还在hibernate.cfg.xml中添加了两行: @Entity @Table(name="user_details") @Cacheable @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) public class UserDetails {...} 正如预期的那样,我只得到一个SELECTquery,这意味着hibernate从二级缓存获取数据。我还可以在控制

上面的代码是我如何将实体类UserDetails定义为
cacheable
。我还在
hibernate.cfg.xml
中添加了两行:

@Entity
@Table(name="user_details")
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY) 
public class UserDetails {...}
正如预期的那样,我只得到一个
SELECT
query,这意味着hibernate从二级缓存获取数据。我还可以在控制台上打印我的对象


但是,我的计划没有结束。它在Eclipse上运行,我必须手动停止它。我做错什么了吗?谢谢。

问题在于您没有关闭维护大量系统资源的
会话工厂。其中一些资源必须是线程,以防止应用程序结束。

尝试更改ehcache的版本。我试过这个东西,它成功了。看到这个了吗

非常感谢。祝您有个美好的一天。
    <!-- second-level cache  -->
    <property name="cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
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();