Hibernate二级缓存 - 程序不会终止

时间:2013-05-23 09:55:54

标签: java mysql hibernate second-level-cache

@Entity
@Table(name="user_details")
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY) 
public class UserDetails {...}

以上代码是我将我的实体类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>

在我的service main方法中,我在不同的会话中访问了两次相同的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上运行,我必须手动停止它。难道我做错了什么?感谢。

2 个答案:

答案 0 :(得分:1)

错误的是你没有关闭SessionFactory,它会维护很多系统资源。其中一些资源必须是线程,这样可以防止应用程序结束。

答案 1 :(得分:0)

尝试更改ehcache的版本。我试过这个东西而且很有效。看到这个 http://forums.terracotta.org/forums/posts/list/6450.page

相关问题