ColdFusion ORM如何处理ORM之外的更改

时间:2010-12-06 15:28:38

标签: caching orm coldfusion cfc

我刚刚开始学习ColdFusion ORM和持久性cfcs以及它如何提高应用程序性能。在尝试在我自己的网站上实现任何内容之前,我仍然在努力获得充分的理解,但有一个问题似乎无法找到答案。

据我所知,大部分性能提升来自于在页面末尾的单个事务中批处理数据库CRUD,以及对select语句的智能缓存。关于后者,这个缓存是如何工作的,更具体地说,它是如何处理ColdFusion应用程序之外的更改。

例如,假设我有一个如下所示的用户表:

名称发型

Nick Brown

John Blonde

现在假设我通过PL / SQL Developer运行一个简单的更新查询,将John的头发颜色更新为黑色。现在...

  • 下次页面试图列出John的头发颜色时会发生什么?
  • 假设头发颜色仍然显示为金色,因为它是缓存的,那么如何刷新缓存呢?
  • 假设头发颜色仍然是金发女郎,如果我使用CF ORM将John的名字改为Jonathon会怎样?它会在更新行时将头发颜色覆盖回金发吗?
  • 同样,如果我尝试使用CF ORM将头发颜色更新为绿色怎么办? CF会检查并注意它的缓存值(金发)不再是当前值(黑色)并给出某种反馈吗?

同样重要的(可能更重要的),如果使用CFQuery更新John的头发颜色而不是外部程序,那些相同问题的答案是什么。换句话说,可以在ORM托管表上安全地使用CFQuery吗?

我尝试查看CF的文档,Hibernate的文档以及各种在线博客,但缺乏有关ORM缓存及其与其他数据库操作方法(CFQuery,PL / SQL Developer等)交互的信息。任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:2)

基本的“缓存”,我引用它,因为它更多的Hibernate会话持续和ColdFusion请求一样长。让我们看看以下工作流程:

ColdFusion请求启动并将Nicks头发更改为Red。请求完成。

在SQL编辑器中运行SELECT * ...并且颜色为红色。使用更新并将其更改为Blond。

新的ColdFusion请求并通过ORM获取Nicks头发的颜色,该值为Blond。

基本上,正如Marc所说,当你不使用 secondary 缓存时,值总是来自数据库,并且工作正常。

答案 1 :(得分:1)

如果从外部更新缓存数据,则必须自行逐出缓存。

见:

ormEvictCollection()ormEvictEntity()ormEvictQueries()

答案 2 :(得分:1)

根据我的经验,在大多数情况下 - 当没有涉及缓存时 - 一切正常。但是,我有一些脚本会消除并重新插入一堆数据作为迁移的一部分。在这些情况下,ORMReload()不起作用,我必须重新启动ColdFusion。发生这种情况时的告示标志是我将从CF获得“更新失败。预期1,收到0”错误。