|
|
|
JPA merge видит обновления объекта при каждом четном запросе
|
|||
|---|---|---|---|
|
#18+
Описание моей ситуации в 5 пунктах. Вопрос ниже. 1) Загружаю в персистенс контекст несколько сущностей по ключу, выполняя для каждого нужного мне идентификатора Код: java 1. 2) Создаю простой инстанс сущности, так называемый detached instance, заполняя идентификатор из attahced инстанса - Код: java 1. 2. 3) Нон-манаджед инстансу прописываю некоторые свойства, например nonManaged.setSigned(true); 4) делаю апдейт в базе посредством Код: java 1. 2. // также пробовал коментить флаш 5) есть другой запрос, который срабатывает при обновлении страницы, он тупо выбирает все записи - Query query = entityManager.createQuery("from Document"); Код: java 1. 2. 3. 4. 5. Проблема в том, новые свойства, записанные в базу посредством мерджа срабатывают, воркбенч показывает, что свойство установилось. Но select-all запрос при первом нажатии F5 и каждых нечетных нажатиях не видит новое значение свойства isSigned, а при четных нажатиях видит так, как лежит в базе. Мои мысли - либо при нечетных нажатиях select-all запрос смотрит в кэше, где неправильное старое значение, а при четных - в базе. Либо это как то связано с тем, что в хибернейт классе это свойство имеет дефолтовое значение - Код: java 1. 2. Но версия с дефолтоным значением отпадает - это нужно только для инсерта, при чем тут селект. Я где-то читал, что персистенс контекст это такая внутрення структура данных, в которой сущности хранятся по ключу(если есть поле с соотвествующей аннотацией, либо какой-то свой автоинкремент используется). У меня есть поле идентификатор. Поэтому я ожидаю - что сущности, вытащенные разными способоами - через find(id) и через select-all и имеющие одинаковый ID, будут считаться как одно и то же в персистенс конетксте. По всей видимости, это не так, и из-за этого глюк. Но как тогда сделать такое - вытаскивать несколько по идентификатору, а потом вытаскивать все простым селектом и чтобы не было глюка с четными/нечетными нажатиями. Вообще говоря, такое ощущение, что в персистенсе контексе две сущности с одинаковым айди - которая через файнд нашлась имеет новое свойство, а которая через селект олл, несмотря на одинаковый ID , в персистенс контекст зашла со старым свойсвом. И персистенс контекст аидит запрос вида отдай сущность по айди и поочерено дает то одну, то другую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 10:00 |
|
||
|
JPA merge видит обновления объекта при каждом четном запросе
|
|||
|---|---|---|---|
|
#18+
BaurzhanS, Как управляете транзакциями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 10:29 |
|
||
|
JPA merge видит обновления объекта при каждом четном запросе
|
|||
|---|---|---|---|
|
#18+
нeJack, у меня update в @Transactional методе, то есть спринг сам управляет. Селект не транзакционный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 11:24 |
|
||
|
JPA merge видит обновления объекта при каждом четном запросе
|
|||
|---|---|---|---|
|
#18+
Ответ на мой вопрос . Если вкратце, то надо обновлять состояние объекта=синхронизировать с БД командой refresh(). Коменты на стековерфлоу тоже полезные - read commited еще надо ставить, в персистенс.хмл isolastion.level="2" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2015, 12:01 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2125779]: |
0ms |
get settings: |
10ms |
get forum list: |
26ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
6ms |
get first new msg: |
4ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 503ms |

| 0 / 0 |
