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()
    下次请求时再次加载(更多加载)
  • 这是唯一的两个解决办法吗?还有别的办法吗

    根据与方法的并发性,若实体在合并时被更改,则“1”将抛出错误,但这如何有用呢?捕获异常并使用方法#2

    何时使用
    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()。这里也有问题: