Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java Persistence commit и проблема в новом query / 10 сообщений из 10, страница 1 из 1
07.09.2013, 21:19:11
    #38390118
OdinKostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
Добрый вечер!

У меня приложение на 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
07.09.2013, 21:25:59
    #38390120
OdinKostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
Ах, да!

После закрытия приложения и нового открытия, все работает как надо!
...
Рейтинг: 0 / 0
07.09.2013, 21:30:34
    #38390125
OdinKostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
Кстати для связи с БД использую TopLink
...
Рейтинг: 0 / 0
08.09.2013, 21:09:38
    #38390493
OdinKostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
Немного поразбирался, оказывается EntityManager кэширует объекты, и пишут что необходимо каждый раз создавать новый.
Но ведь память переполнится, если я буду выполнять много запросов на чтение и создавать заново объекты, прога такая.
Как мне поступить?
...
Рейтинг: 0 / 0
08.09.2013, 22:31:53
    #38390530
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
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
09.09.2013, 08:18:36
    #38390621
OdinKostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
не помогло(
...
Рейтинг: 0 / 0
09.09.2013, 09:38:20
    #38390672
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java Persistence commit и проблема в новом query
Тут конечно всего кода не видно, но вот это очень подозрительно:
Код: java
1.
2.
3.
4.
5.
if (e.getType() == TableModelEvent.UPDATE)
{
entityManagerSklad.getTransaction().commit();
entityManagerSklad.getTransaction().begin();
}


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

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


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