2011-05-27 90 views
0

嗨在我的应用程序中,我有几个小表,我缓存他们全部在服务器启动一个地图。我想Ecache来实现相同的功能+ hibernate的组合与Echache +休眠缓存

我的课看起来像

@Entity 
    @Table(name = "Order") 
    @NamedQueries 
    ({ 
    @NamedQuery(name="Order.findBySource", 
     query="from Order a where a.source = :source"), 

    @NamedQuery(name="Order.findByAll", 
     query="from Order"), 

    @NamedQuery(name="Order.findByPrioritySource", 
     query="from Order a where a.priority = :priority and a.source = :source"), 

    @NamedQuery(name="Order.findByPriority", 
     query="from Order a where a.priority = :priority"), 

    @NamedQuery(name="Order.findByWhenModified", 
     query="from Order a where a.whenModified = :whenModified") 
    }) 
     @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 

    public class Order implements java.io.Serializable { 

     private String source; 
     private long priority; 
     private Date whenModified; 
    } 

这个顺序表几乎没有10个条目,我想保留此表中存储所有的时间。 任何见解我如何实现这一目标?

我启动上述命名查询来获取订单。我不想一次又一次地去DB,当我在这个ecache.xml中启动这个查询时,我需要输入这个类吗?或者我需要在ecache.xml中缓存这些命名的查询?

是否有可能通过Ehcache复制Map实现。这样我就可以通过指定缓存中的ID而不必再次敲击数据库来获取对象?

回答

2

你需要的是Hibernate查询缓存。首先,您需要通过将hibernate.cache.use_query_cache属性设置为true来在Hibernate级别启用它。然后,当你在代码中执行查询你需要设置一个标志查询对象上,以表明它需要缓存:

Query q = session.getNamedQuery("Order.findByPriority"); 
q.setCacheable(true); 
List result = q.list(); 
+0

另见http://ehcache.org/documentation/hibernate.html的正确配置缓存使用查询。在阅读本文档之前,我有一些问题。 – jbrookover 2011-06-04 13:29:09