2011-12-27 3 views
2

Я использую JPA для своего корпоративного приложения, и когда я изменяю значения строки в моей таблице базы данных, связанный объект (получить его по find(-)) не обновляется с новым значением.Java JPA - база данных и сущность синхронизации

Я думаю, что существует проблема синхронизации между сущностью и базой данных или простым кешем, поэтому как я могу ее решить?

+1

Значение изменено в БД? Вы должны уточнить вопрос - укажите пример, что вы делаете. – viktor

+0

Значения были изменены вручную и непосредственно в базу данных. Когда я выполняю поиск из своего класса JPA, я получаю старые данные. – CeccoCQ

ответ

2

При редактировании строки базы данных не используя JPA вы должны вызвать EntityManager#refresh(-) используя объект извлекалось find(-) в качестве параметра или вызова EntityManager#clear(-) и затем вызвать find(-) снова.

+0

Я пробовал и работает правильно, но есть метод, чтобы избежать вызова «обновления» для каждого запроса? – CeccoCQ

+0

Ну, нет простого решения. Вы обновляете свою базу данных вне контекста JPA, поэтому JPA не знает об изменениях - это плохо. Без кэширования вы попадаете в базу данных с каждым запросом. Здесь вы можете найти дополнительную информацию о [L1 cache] (http://en.wikibooks.org/wiki/Java_Persistence/Caching#1st_Level_Cache). Вы могли бы также прочитать вашу документацию поставщика JPA и посмотреть, не определяет ли она какое-либо свойство для отключения кеша L1. –

+0

Хорошо, спасибо. Работает правильно. – CeccoCQ