powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java Persistence commit и проблема в новом query
10 сообщений из 10, страница 1 из 1
Java Persistence commit и проблема в новом query
    #38390118
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

У меня приложение на java и БД MS Access.
В приложении jtable, в jtable изменяю ячейки "Страна" и записываю изменения в бд:
tablePrice.getModel().addTableModelListener(new TableModelListener()
{
@Override
public void tableChanged(TableModelEvent e)
{
// Коммит в БД при изменениях в ячейках
if (e.getType() == TableModelEvent.UPDATE)
{
entityManagerSklad.getTransaction().commit();
entityManagerSklad.getTransaction().begin();
}
}
});

при закрытии приложения код:
_connection.close();
entityManagerSklad.flush();

Так вот, после изменений в БД, и создании нового запроса данных с фильтром по ячейке "Страна":
queryPrice = entityManagerSklad.createQuery("SELECT s FROM SKPrice s WHERE s.country_production LIKE :cp");
queryPrice.setParameter("cp", "%" + textFieldCountry.getText() + "%");
listPrice.clear();
listPrice.addAll(queryPrice.getResultList());
...
мой фильтр не работает для измененных данны. НО если создаю новый запрос без фильтра, т.е. на все данные, в jtable я вижу мои изменения.

Еще ковырялся с flush() и бывало, что в запросе ровно через раз, то работает фильтр то нет.

Что думаете?
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390120
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ах, да!

После закрытия приложения и нового открытия, все работает как надо!
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390125
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати для связи с БД использую TopLink
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390493
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного поразбирался, оказывается EntityManager кэширует объекты, и пишут что необходимо каждый раз создавать новый.
Но ведь память переполнится, если я буду выполнять много запросов на чтение и создавать заново объекты, прога такая.
Как мне поступить?
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390530
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OdinKostya,

Попробуйте добавить в настройки persistence.xml след. св-во:
Код: xml
1.
2.
3.
4.
5.
<persistence>
    <properties>
      <property name="toplink.cache.shared.default" value="false"/>
    </properties>
</persistence>


- http://stackoverflow.com/a/2709840
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390621
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не помогло(
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38390672
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут конечно всего кода не видно, но вот это очень подозрительно:
Код: java
1.
2.
3.
4.
5.
if (e.getType() == TableModelEvent.UPDATE)
{
entityManagerSklad.getTransaction().commit();
entityManagerSklad.getTransaction().begin();
}


А где старт первой транзакции? Может, стоит убрать ручное управление, если первая транзакция автоматическая?
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38391125
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть, после инициализации компонентов приложения и первых запросов на чтение в конструкторе пишу:
entityManagerSklad.getTransaction().begin();
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38391547
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще замечена такая особенность, если пишу:

if (e.getType() == TableModelEvent.UPDATE)
{
SKPrice price = (SKPrice) listPrice.get(e.getFirstRow());
SKPrice priceNew = entityManagerSklad.merge(price);
entityManagerSklad.getTransaction().commit();
entityManagerSklad.getTransaction().begin();
}

И в поле "country" объекта, которое было null, пишу страну (т.е. перед выполнение кода выше). Затем выполняю запрос фильтром по стране. В первый раз этот объект не попадает в результат запроса, второй раз тоже самое вызываю, он уже попадает, потом снова не попадает и т.д. Такое разное количество объектов выдает именно query (код в сообщениях выше).

Еще смущает некоторый момент у меня JPA провайдер называется TopLink (JPA 1.0). Что это за 1.0, когда у других провайдеров (hibernate и eclipseLink) 2.0.
...
Рейтинг: 0 / 0
Java Persistence commit и проблема в новом query
    #38391834
OdinKostya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решилась сменой провайдера на hibernate (JPA 1.0).
Подключил библиотеку hibernate JPA.
Видимо глюки с кэшем 1 уровня у TopLink.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java Persistence commit и проблема в новом query
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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