Hibernate 使用Echache+进行缓存;冬眠

Hibernate 使用Echache+进行缓存;冬眠,hibernate,caching,orm,jpa-2.0,ehcache,Hibernate,Caching,Orm,Jpa 2.0,Ehcache,嗨,在我的应用程序中,我有几个小表,我在服务器启动时将它们全部缓存在映射中。我想通过Ecache+hibernate组合实现相同的功能 我的班级看起来像 @Entity @Table(name = "Order") @NamedQueries ({ @NamedQuery(name="Order.findBySource", query="from Order a where a.source = :source"), @NamedQuer

嗨,在我的应用程序中,我有几个小表,我在服务器启动时将它们全部缓存在映射中。我想通过Ecache+hibernate组合实现相同的功能

我的班级看起来像

  @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复制映射实现。这样,我就可以通过从缓存中指定ID来获取对象,而不必一次又一次地访问数据库?

您需要的是Hibernate查询缓存。首先,您需要通过将Hibernate.cache.use\u query\u cache属性设置为true,在Hibernate级别启用它。然后,在代码中执行查询时,需要在查询对象上设置一个标志,以指示它需要缓存:

Query q = session.getNamedQuery("Order.findByPriority");
q.setCacheable(true);
List result = q.list();
另请参阅,了解如何正确配置缓存以处理查询。在阅读此文档之前,我遇到了一些问题。