Существует несколько способов решения этой проблемы:
Ребята из Hibernate скажут вам, что вам, вероятно, следует открыть другой сеанс, чтобы получить последние данные из базы данных. Они отметили бы, что цель сессии - охватить относительно недолговечную единицу работы.
Вы можете либо вызвать Session.Refresh()
внутри вашего GetPerson()
метода, чтобы всегда получать самое актуальное состояние из базы данных, либо вы можете предоставить эту функциональность с помощью собственного Refresh()
метода.
В качестве альтернативы, если у вас есть дескриптор самого объекта Person
, вы также можете попробовать Session.Evict()
удалить объект Person
из кэша сеанса до его повторной загрузки.
По своему опыту, я пробовал оба # 2 и # 3 и в конце концов всегда приходил к рефакторингу, чтобы сделать # 1.