2

IfUser是一个实体,我需要存储User在 中Session,它将在下一次请求时分离。

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

  1. EntityMerge(session.user)- 使用会话对象更新数据库(不安全)
  2. session.userID-entityLoadByPK()在下一次请求时再次(更多负载)

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

根据Advanced Techniques with ColdFusion 9 ORM Integration Slide Deck Concurrency with method #1 如果实体在合并时已更改,则将引发错误,但这有什么用?捕获异常并使用方法#2?

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

谢谢!

4

3 回答 3

3

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

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

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

于 2010-12-14T03:07:41.680 回答
2

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

于 2010-12-14T02:40:07.987 回答
0

Hibernate 会话是延迟加载的,并且不会持续存在。因此,当您在内存中有 CF 对象时,由于缺乏更好的术语,它们指向超出范围的 Hibernate 会话。要回到范围内,您基本上需要在后续请求中唤醒它,使用类似 EntitySave() 或 EntityLoadByExample()

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

于 2010-12-14T16:54:48.303 回答