Кэш 1-го уровня у Hibernate храниться в сессии, и с ее закрытием теряются и все данные которые в нем были. Встает вопрос: как задизайнить свой DAO
слой что-бы не потерять это полезное свойство Hibernate? Получается что надо держать сессию открытой? Но когда-то же надо ее закрывать...
На пример вот такой DAO класс:
public class DAOImpl implements DAO {
private final SessionFactory factory;
public DAOImpl(final SessionFactory factory) {
this.factory = factory;
}
public void addUser(final User user) {
try (final Session session = factory.openSession()) {
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}
}
//... и остальные CRUD операции.
}
Тут вероятно воспользоваться преимеществами кеширования не получится. Каждый кто придет откроет новую сессию и закроет ее при выходе из метода.
Объясните пожалуйста на примере этого небольшого класса как сделать так, что-бы преимущества кэширования были использованы (для начала хоть как-то), но при этом и проблемы с брошенной не закрытой сессией тоже не было? Как в обычных типовых случаях такое решается? Спасибо.
Вы можете использовать кэш 2го уровня - он распространяется на фабрику сессий. По умолчанию - выключен. Для включения необходимо указать:
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/>
//или в более старых версиях
//<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
1я строка указывать на конкретную реализацию кэша, популярные варианты:
Подробнее: оф. документация, статья на хабре
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый день, в очередной раз попал в тупик и не знаю как быть, помогите плиззз есть две таблицы, использую spring и hibernate
Подскажите, как я могу считать данные с EditText и прогнать их через метод в другом классе?
В моей cms есть настройка с adminareasettingsricheditoradditionalsettings и значением settings