Кеширование с помощью Echache + Hibernate - PullRequest
0 голосов
/ 27 мая 2011

Привет, в моем приложении у меня есть несколько небольших таблиц, и я кеширую их все при запуске сервера на карте.Я хочу реализовать ту же функциональность с помощью комбинации 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 записей, и я хочу постоянно хранить эту таблицу в памяти.Любые идеи, как я могу достичь этого?

Я запускаю вышеупомянутые запросы для получения заказов.Я не хочу заходить в БД снова и снова, когда запускаю этот запрос, поэтому для этого в ecache.xml мне нужно сделать запись этого класса?или мне нужно кэшировать эти именованные запросы в ecache.xml?

возможно ли воспроизвести реализацию Map с помощью Ehcache.чтобы я мог получить объект, просто указав идентификатор из кэша, не обращаясь к БД снова и снова?

1 Ответ

2 голосов
/ 27 мая 2011

Что вам нужно, так это кеш запросов Hibernate.Прежде всего вам нужно включить его на уровне Hibernate, установив для свойства hibernate.cache.use_query_cache значение true.Затем, когда вы выполняете запрос в коде, вам нужно установить флаг для объекта запроса, чтобы указать, что он требует кэширования:

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