如果 User 是一个实体,我需要存储 UserSession, ,它将根据下一个请求分离。

afaik只有2种方法来处理这些分离的对象

  1. EntityMerge(session.user) - 使用Session对象(不安全)更新DB
  2. session.userID - entityLoadByPK() 再次在下一个请求(更多负载)

这些是仅有的两个解决方法吗?还有其他方法吗?

根据 带有ColdFusion 9 Orm Integration Slide Deck的高级技术 如果合并更改实体,则与方法1的并发将丢弃错误,但是这有用?捕获异常并使用方法#2?

何时使用 EntityReload()?我认为它的工作方式与 EntityMerge(entity) 但事实并非如此。

谢谢!

有帮助吗?

解决方案

我倾向于仅存储会话中登录的用户的ID。

然后,我有一个userService.getCurrentuser()幕墙方法,该方法在我需要的情况下返回该用户。

这样,用户始终是最新的,并且永远不会超越。

其他提示

我通常只在会话中使用轻巧的代理对象(仅包含顶级属性),并且仅在与您所描述的完全相同的用例中加载完整的实体。除非您真的想燃烧自己(在那里聊天),否则不要使用方法#1。

冬眠会议是懒惰的,不要持续。因此,当您在内存中有CF对象时,它们指向一个冬眠的会话,该会话超出了范围,因为缺乏更好的术语。要重新恢复范围,您基本上需要使用EntitySave()或EntityLoadByExample()之类的内容来唤醒其后续请求。

我确实同意,在服务中包装不仅可以帮助您避免其中一些问题,而且总体上比直接触摸实体更好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top