JPA: запрос не получает последние данные - PullRequest
1 голос
/ 06 декабря 2010

Я обнаружил, что JPA не получает последние данные из базы данных.

В моей модели данных есть объект-клиент, которому принадлежит несколько объектов-заказов. Я сохраняю заказ:

em.persist(order);
em.getTransaction().commit();
em.close();

Для просмотра заказов звоню:

Collection<Order> orders = customer.getOrderCollection();

В коллекции заказов отсутствует последний заказ. Я проверил, и заказ сохраняется в базе данных. При включенном ведении журнала драйверов я не вижу вызовов в базу данных при вызове getOrderCollection ().

В Netbeans 6.9 при остановке и повторном развертывании приложения отображается последний сохраненный порядок. Так что, возможно, есть какое-то кеширование, которое может мешать getOrderCollection ()? По какой-то причине JPA не собирается в базу данных. Почему?

Как заставить JPA перейти в базу данных при вызове getOrderCollection ()?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Вы должны поддерживать двунаправленные отношения в вашей объектной модели. Когда вы добавляете новый Заказ для Клиента, вы должны добавить его к заказам Клиента.

т.е.

public void addOrder(Order order) {
  this.orders.add(order);
  order.setCustomer(this);
}

Вы также можете обновить объект или отключить кэш, но лучше исправить код.

См

http://en.wikibooks.org/wiki/Java_Persistence/Caching

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

2 голосов
/ 06 декабря 2010

Попробуйте <shared-cache-mode>NONE</shared-cache-mode>, в вашем файле persistence.xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...