Как работать с обособленным объектом в CF9? - PullRequest
2 голосов
/ 14 декабря 2010

Если User является сущностью, и мне нужно сохранить User в Session, она будет отсоединена при следующем запросе.

AFAIK, есть только 2 метода для обработки этих отсоединенных объектов

  1. EntityMerge(session.user) - обновить БД с помощью объекта сеанса (небезопасно)
  2. session.userID - entityLoadByPK() снова при следующем запросе (дополнительная загрузка)

Это только 2 обходных пути?Любые другие способы?

В соответствии с Расширенными методами с ColdFusion 9 ORM Slide Deck Параллелизм с методом # 1 вызовет ошибку, если объект был изменен при слиянии, но как это полезно?поймать исключение и использовать метод # 2?

Когда использовать EntityReload()?Я думал, что это работает так же, как EntityMerge(entity), но это не так.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Я склонен хранить только идентификатор пользователя, вошедшего в сеанс.

Тогда у меня есть метод фасада UserService.getCurrentUser (), который возвращает этого пользователя, если он мне нужен.

Таким образом, пользователь всегда актуален и никогда не отключается.

2 голосов
/ 14 декабря 2010

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

0 голосов
/ 14 декабря 2010

Hibernate-сессии загружаются лениво и не сохраняются. Таким образом, пока у вас есть объект CF в памяти, он указывает на сеанс Hibernate, который выходит за рамки, из-за отсутствия лучшей терминологии. Чтобы вернуться в область видимости, вам, в основном, нужно разбудить его при последующих запросах, используя что-то вроде EntitySave () или EntityLoadByExample ()

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

...