Orm 如何在CF9中处理分离的对象?
如果Orm 如何在CF9中处理分离的对象?,orm,coldfusion,coldfusion-9,Orm,Coldfusion,Coldfusion 9,如果User是一个实体,我需要将User存储在Session中,它将在下次请求时分离 现在只有两种方法可以处理这些分离的对象 EntityMerge(session.user)-使用会话对象更新数据库(不安全) session.userID-entityLoadByPK()下次请求时再次加载(更多加载) 这是唯一的两个解决办法吗?还有别的办法吗 根据与方法的并发性,若实体在合并时被更改,则“1”将抛出错误,但这如何有用呢?捕获异常并使用方法#2 何时使用EntityReload()?我认为它的工
User
是一个实体,我需要将User
存储在Session
中,它将在下次请求时分离
现在只有两种方法可以处理这些分离的对象
EntityMerge(session.user)
-使用会话对象更新数据库(不安全)session.userID
-entityLoadByPK()
下次请求时再次加载(更多加载)EntityReload()
?我认为它的工作方式与EntityMerge(entity)
相同,但事实并非如此
谢谢 我通常只在会话中使用轻量级代理对象(仅包含顶级属性),并且只在与您描述的用例完全相同的情况下根据需要加载完整实体。不要使用方法#1,除非你真的想自焚(体验那里的谈话)。我倾向于只存储登录会话的用户的ID 然后我有一个UserService.getCurrentUser()facade方法,如果需要,它会返回该用户
这样,用户总是最新的,从不分离。Hibernate会话是延迟加载的,不会持久化。因此,当您在内存中有CF对象时,由于缺乏更好的术语,它们指向的是一个超出范围的Hibernate会话。要返回范围,基本上需要在后续请求中唤醒它,使用EntitySave()或EntityLoadByExample()之类的方法
我确实同意,在服务中包装不仅可以帮助您避免这些问题,而且在架构上总的来说比直接接触实体要好。多轻量级?只是没有行为的领域?它与方法2等属性的结构有何不同?谢谢+1这就是我所做的(与@Mark Mandel的答案和@Henry的选项相同的概念2),但比ID更强大一些)。我已经定义了一个UserBean,其中包含来自用户ORM实体的一小部分信息(例如id、用户名、全名),填充(Coldbox beanFactory.populate使其成为单个调用)并保存到会话。任何复杂的查找(比如子关系)都引用session.userbean.getID()。这里也有问题: