@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>
在我的服务主要方法中,我在不同的会话中访问了两次相同的 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
查询,这意味着休眠从二级缓存中获取数据。我还在控制台上打印了我的对象。
但是,我的程序并没有结束。它坐在那里运行,Eclipse
我必须手动停止它。难道我做错了什么?谢谢。