Как работать с отдельным объектом в CF9?
-
09-10-2019 - |
Вопрос
Если User
это сущность, и мне нужно хранить User
в Session
, это будет отделено на следующий запрос.
AFAIK там только 2 метода для обработки этих отдельных объектов
EntityMerge(session.user)
- Обновите БД с объектом сеанса (небезопасный)session.userID
-entityLoadByPK()
снова на следующий запрос (больше нагрузки)
Это единственные 2 обходных пути? Любые другие способы?
В соответствии с Расширенные методы с ColdFusion 9 ARM Integration Slide Deck Параллельность с методом № 1 бросит ошибку, если объект был изменен на слиянии, но как это полезно? Поймайте исключение и используйте метод № 2?
Когда использовать EntityReload()
? Я думал, что это работает так же, как EntityMerge(entity)
Но это не так.
Спасибо!
Решение
Я склонен хранить только идентификатор пользователя, который вошел в систему на сеансе.
Тогда у меня есть метод фасада allowervice.getCurrentUSER (), который возвращает этот пользователь, если мне это нужно.
Таким образом, пользователь всегда действует и никогда не отсоединяется.
Другие советы
Как правило, я просто использую легкий прокси-объект (содержащий только верхние свойства только) в сеансе и загружаю только полное сущность по мере необходимости в том же случае, когда вы описали. Не используйте метод № 1, если вы не хотите сжечь себя (опыт разговаривает там).
Сессии в гибернации ленивы, и не сохраняются. Поэтому, хотя у вас есть объект CF в памяти, они указывают на сессию на гибернацию, которая не имеет возможности, из-за отсутствия лучшей терминологии. Чтобы вернуться в области применения, вы в основном нужно разбудить его в последующие запросы, используя что-то вроде Entitysave () или EntityLoadbyExample ()
Я согласен с тем, что упаковка в службе не только помогает избежать некоторых из этих вопросов, но в целом лучше архитектурно, чем касаясь сущности напрямую.