powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate. Отключить кэширование.
6 сообщений из 6, страница 1 из 1
Hibernate. Отключить кэширование.
    #37995383
ochoba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
У меня проблемка с хибернейтом. Выполняю запрос один раз, возвращает верное значение. Меняю вручную значение в базе (Оракл11), снова выполняю запрос, он возвращает то же значение, что и в первый раз.
Я так понимаю, что хибернейт закэшировал это значение. Вопрос, как мне обойти эту проблему? Я рассчитывал, что session.flush() синхронизирует текущие значения объектов с базой, но похоже, я что-то не так понимаю, и это не помогает.
Я новичок, и сделать мне это нужно единожды, поэтому раскуривать мануалы - не лучший выбор.
Может тут есть какое-то простое решение?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class ServiceImpl
{
public static String get(final String param1, final String param2, final String param3)
	{
		try
		{
			String value = HibernateExecutor.getInstance().execute(new HibernateAction<String>()
			{
				public String run(Session session) throws Exception
				{
					//session.setCacheMode(CacheMode.IGNORE);
					session.flush();

					Query query = session.getNamedQuery("queryGet");
					query.setParameter("par1", param1);
					query.setParameter("par2", param2);
					query.setParameter("par3", param3);
					String result = (String) query.uniqueResult();
					
					return result;
				}
			});

			return value;
		
	}
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<hibernate-mapping>

    <class name="ServiceImpl" table="TABLE1" batch-size="500">

        <id name="synchKey" type="string" column="id"/>

	     <property name="par1" type="string" column="col1"/>
             <property name="par2" type="string" column="col2" />
	     <property name="par4" type="string" column="col3"/>
	     <property name="value" type="string" column="col4"/>

    </class>

	<query name="queryGet">
        select value from ServiceImpl as table1
            where table1.par1=:par1 and table1.par2=:par2 and table1.par3=:par3
    </query>

</hibernate-mapping>
...
Рейтинг: 0 / 0
Hibernate. Отключить кэширование.
    #37995412
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ochoba,

Код: xml
1.
2.
<property name="hibernate.cache.use_second_level_cache" value="false" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
...
Рейтинг: 0 / 0
Hibernate. Отключить кэширование.
    #37995473
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кэш второго уровня и кэш запросов отключены по- умолчанию; попробуйте

Код: java
1.
2.
3.
...
session.clear()
...
...
Рейтинг: 0 / 0
Hibernate. Отключить кэширование.
    #37995518
ochoba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanov-void,

Порылся в настройках, кэш запросов включен
Код: xml
1.
<property name="hibernate.cache.use_query_cache">true</property>


Но, я вычитал, что для кэширования нужно еще устанавливать
Код: java
1.
query.setCacheable(true);

у меня сacheable false, т.е., по идее, он не должен кэшироваться.

Еще такой момент, приложение достаточно большое, и я хочу сделать просто костыль в одном месте, поэтому менять глобальные настройки не хочется.

Попробую
Код: java
1.
session.clear()

как вы предложили.
...
Рейтинг: 0 / 0
Hibernate. Отключить кэширование.
    #37995529
ochoba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще видел пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Query query = session.createQuery("from SharedDoc doc where doc.name = :name");

SharedDoc persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult();
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) query.setParameter("name", "first").uniqueResult();
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);


Результаты такого рода запросов не сохраняются ни кешом первого, ни второго уровня. Это как раз то место, где можно использовать кеш запросов. Он тоже по умолчанию отключен.
Я так понимаю, это из-за того, что запрос создается каждый раз заново? Попробую сейчас сделать так.
...
Рейтинг: 0 / 0
Hibernate. Отключить кэширование.
    #37995727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ochoba,
чем меняли в базе? Коммит потом точно сделали?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate. Отключить кэширование.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]