如果User
是一个实体,并且我需要在User
中存储Session
,则会在下次请求时将其分离。
AFAIK只有两种处理这些分离对象的方法
EntityMerge(session.user)
- 使用会话对象(不安全)更新数据库session.userID
- entityLoadByPK()
(更多负载)这些只是2个解决方法吗?还有其他方法吗?
根据Advanced Techniques with ColdFusion 9 ORM Integration Slide Deck如果在合并时更改了实体,则方法#1的并发将抛出错误,但这有何用处?捕获异常并使用方法#2?
何时使用EntityReload()
?我认为它的工作方式与EntityMerge(entity)
相同,但事实并非如此。
谢谢!
答案 0 :(得分:3)
我倾向于只存储会话中登录的用户的ID。
然后我有一个UserService.getCurrentUser()外观方法,如果需要,它会返回该用户。
这样,用户总是最新的,永远不会分离。
答案 1 :(得分:2)
我通常只在会话中使用轻量级代理对象(仅包含顶级属性),并且只根据需要在完全相同的用例中加载完整实体。不要使用方法#1,除非你真的想要自己烧(体验在那里说话)。
答案 2 :(得分:0)
Hibernate会话是延迟加载的,并且不会持久化。因此,虽然你在内存中有CF对象,但由于缺乏更好的术语,它们指向的Hibernate会话超出了范围。要恢复范围,您基本上需要使用EntitySave()或EntityLoadByExample()
之类的东西将其唤醒后续请求我同意在服务中包装不仅可以帮助您避免某些问题,而且在结构上总体上比直接触摸实体更好。