如何在CF9中使用分离对象?

时间:2010-12-14 02:30:58

标签: orm coldfusion coldfusion-9

如果User是一个实体,并且我需要在User中存储Session,则会在下次请求时将其分离。

AFAIK只有两种处理这些分离对象的方法

  1. EntityMerge(session.user) - 使用会话对象(不安全)更新数据库
  2. 下次请求时再次
  3. session.userID - entityLoadByPK()(更多负载)
  4. 这些只是2个解决方法吗?还有其他方法吗?

    根据Advanced Techniques with ColdFusion 9 ORM Integration Slide Deck如果在合并时更改了实体,则方法#1的并发将抛出错误,但这有何用处?捕获异常并使用方法#2?

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

    谢谢!

3 个答案:

答案 0 :(得分:3)

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

然后我有一个UserService.getCurrentUser()外观方法,如果需要,它会返回该用户。

这样,用户总是最新的,永远不会分离。

答案 1 :(得分:2)

我通常只在会话中使用轻量级代理对象(仅包含顶级属性),并且只根据需要在完全相同的用例中加载完整实体。不要使用方法#1,除非你真的想要自己烧(体验在那里说话)。

答案 2 :(得分:0)

Hibernate会话是延迟加载的,并且不会持久化。因此,虽然你在内存中有CF对象,但由于缺乏更好的术语,它们指向的Hibernate会话超出了范围。要恢复范围,您基本上需要使用EntitySave()或EntityLoadByExample()

之类的东西将其唤醒后续请求

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