hibernate не добавляет сущность в постоянство контекста после сохранения

У меня есть управляющий элемент, у которого есть список объектов сущности текущей страницы. после того, как я создаю новый объект и сохраняю его в БД, используя persist () в транзакции; в другой транзакции, когда я вызываю слияние (потому что объект находится в отключенном состоянии из-за предыдущей фиксации транзакции); entitymanager не может найти объект в контексте постоянства и отправить запрос на выборку в базу данных. Я что-то упускаю или это нормальное поведение?

Обновление: вышеупомянутая проблема существует, когда я использую базу данных mysql и автоматически сгенерированный столбец Id. Он не существует, когда я использую Oracle, где я использую последовательность для идентификаторов; но до сих пор; контекст постоянства должен знать о сгенерированном идентификаторе; также есть ли способ заглянуть в постоянный контекст, чтобы увидеть, какие сущности выходят; Я использую спящий режим кстати

Ответы на вопрос(2)

Решение Вопроса

Это нормальное поведение. Контекст постоянства по умолчанию имеет то же время жизни транзакции. И это'Это совершенно нормально: как только транзакция зафиксирована, другие транзакции могут изменить сущность, и Hibernate должен перезагрузить сущность из базы данных, чтобы убедиться, что она не 't возвращает устаревшие значения.

 JB Nizet02 нояб. 2012 г., 20:43
Как я уже сказал, вы должны добавить код к вашему вопросу, а также дополнительный запрос, который вы 'видишь.
 x0r02 нояб. 2012 г., 11:09
Но я называю слияние; почему нельзя просто слить, не запрашивая базу данных?
 JB Nizet02 нояб. 2012 г., 16:40
В вашей среде Oracle либо объект уже загружен в сеанс, когда вы его объединяете, либо у вас есть кэш второго уровня, который содержит объект. Это не имеет ничего общего с автоматически сгенерированными идентификаторами (если описанный вами сценарий является реальностью: вы должны добавить код к своему вопросу, а также дополнительный запрос, который вы 'видя).
 x0r02 нояб. 2012 г., 16:37
Мне жаль, что я новичок в этой среде - Hibernate JPA - поэтому у меня нет твердых знаний, как вы видите; но та же архитектура работает один Oracle без дополнительного оператора выбора. Я думаю, что это как-то связано с автоматически сгенерированным идентификатором; но я не знаю почему. Я на этом.
 x0r02 нояб. 2012 г., 20:42
Я забыл, что я установил кэш второго уровня; Я использую ehcache - я решил одну из своих проблем - когда я читаю сущность из базы данных, она не требует дополнительного выбора при слиянии (поскольку она находится в кеше); но когда я пытаюсь объединить вновь вставленную сущность; это требует. Но; У меня все еще есть одна проблема; Я использую ту же кодовую базу для Oracle и MySql, и Oracle не требует дополнительного выбора; у вас есть какие-либо подсказки для этого?
 JB Nizet02 нояб. 2012 г., 15:58
Потому что слияние означает только это: скопируйте состояние переданного отсоединенного объекта в присоединенный объект, извлеченный из базы данных. Так как тыВ другой транзакции кеш пуст и ему необходимо загрузить объект из базы данных.

остоянства, ему нужно знать, существует он или нет (должен быть перезаписан или заново создан позже).

Генерация идентификатора: сгенерированный идентификатор обычно возвращается при вызове метода persist (..), что очень удобно, поэтому ваше приложение может сразу же использовать вновь созданный идентификатор, не нужно ждать окончания транзакции.

Вы можете проверить, находится ли данный объект в контексте постоянства, вызвав:https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#contains%28java.lang.Object%29

 x0r02 нояб. 2012 г., 11:17
Я не понимаю, как это актуально; когда я упорствую; это должно добавить к persistenceContext, и я должен слить без запроса выбора; я ошибся?

Ваш ответ на вопрос