EclipseLink не может получить объекты, вставленные вручную - PullRequest
1 голос
/ 29 июня 2011

У меня проблемы с EclipseLink.Моя программа должна взаимодействовать с базой данных (представляющей здание).Я написал небольшой входной тестовый режим, в котором я могу вручную вставлять вещи через консоль.

Моя проблема: обычная операция getByID работает очень хорошо, если я пытаюсь получить сущность, которую я ранее вставил через сам EclipseLink (by commit ()), но выдает исключение NoResultException при попытке выбрать строку, вставленную вручную через SQL-скрипт (сборка -> много комнат -> сценарий).

Это (с чрезмерным упрощением) работает нормально:

main() {
  MyRoom r = new MyRoom();
  r.setID("floor1-roomnr4");
  em.commit(r); //entity manager
  DAO.getRoomByID("floor1-roomnr4"); // works
}

и комбинация generation-script + просто getRoomByID () вызывает исключение.

Если я пробую это в SQL Developer, я получаю желаемый результат для точного оператор выбора, который только что сгенерировал исключение NoResultException.Я также получаю эту проблему только в режиме ввода, в противном случае выбор сгенерированных строк также работает нормально.

Есть ли в EclipseLink какой-то механизм кэширования, о котором я не знаю, который вызывает некоторую проблему?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы уверены, что EclipseLink и SQL Developer подключены к одной и той же базе данных? Пожалуйста, проверьте информацию о соединении для обоих. Генерирует ли сценарий изменений с помощью команды commit?

0 голосов
/ 29 июня 2011

Если EclipseLink работает аналогично Hibernate, тогда да, есть кеш. «Кэш первого уровня» гарантирует, что вы получите точно такой же экземпляр в одной транзакции, что имеет смысл. Если вы знаете EclipseLink / Transactions, попробуйте удалить все загруженные экземпляры или зафиксировать транзакцию, а затем повторите попытку DAO. Это заставит EclipseLink снова извлечь данные из базы данных

См. Ответ на аналогичный вопрос

...