Java EclipseLink персистентная библиотека возвращает неверные данные - PullRequest
1 голос
/ 10 января 2011

Я использую провайдер EclipseLink для общения с базой данных mysql.Я заметил, что в области моего приложения библиотека возвращает данные запроса, которые не соответствуют БД.

Запрос:

@NamedQuery(name = "EmailAddress.findAll", query = "SELECT e FROM EmailAddress e")

Этот запрос правильный, я в этом уверен.Код, который я использую для выполнения этого запроса:

  EntityTransaction entr = em.getTransaction();
  entr.begin();
  emailAddresses = em.createNamedQuery("EmailAddress.findAll").getResultList();
  em.close()

Я установил точку останова на закрытие, чтобы я мог видеть содержимое списка emailAddress, примерно 1 раз в 3массив заполнен неправильно.Немного больше предыстории - у меня есть таблица, в которой перечислены имена, при нажатии на имя появляется диалоговое окно и позволяет изменить имя, при нажатии кнопки «Сохранить» оно закрывает диалог и обновляет таблицу (как БД, так и пользовательский интерфейс), иногда пользовательский интерфейснеправильно обновлено и отредактированное имя не обновляется.Обновление запускает код, включающий указанный выше блок.База данных корректно обновляется до запуска кода, просто массив заполнен неправильно.

У кого-нибудь еще были проблемы, связанные с этим, или есть какие-либо идеи?

Любая помощь сильнооценили!

Ответы [ 2 ]

1 голос
/ 10 января 2011

Я исправил это, обновляя кеш при каждом запросе, так что это было что-то с кешем.Поскольку это приложение однопользовательское и не очень большое, не так много обращений к БД, так что это нормально для этого приложения.

0 голосов
/ 10 января 2011

Сложно сказать, не видя остальной код, но вы уверены, что:

  1. Ваши транзакции не слишком длинные (т. Е. Вы не открываете транзакцию и не открываете ее, пока пользователь что-то делает). Вы должны открывать и закрывать транзакции только вокруг запросов / обновлений данных.

  2. Вы вызываете persist (), merge () и refresh () соответственно при создании или обновлении сущностей.

...