#hibernate #caching #orm #jpa-2.0 #ehcache
#гибернация #кэширование #orm #jpa-2.0 #ehcache
Вопрос:
Привет, в моем приложении у меня есть несколько небольших таблиц, и я кэширую их все при запуске сервера на карте. Я хочу реализовать ту же функциональность с помощью комбинации 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:
Что вам нужно, так это кэш запросов гибернации. Прежде всего, вам нужно включить его на уровне гибернации, установив для свойства hibernate.cache.use_query_cache значение true. Затем, когда вы выполняете свой запрос в коде, вам нужно установить флаг для объекта запроса, чтобы указать, что он требует кэширования:
Query q = session.getNamedQuery("Order.findByPriority");
q.setCacheable(true);
List result = q.list();
Комментарии:
1. Также смотрите ehcache.org/documentation/hibernate.html для правильной настройки кэша для работы с запросами. У меня возникли некоторые проблемы перед прочтением этого документа.