【问题标题】:Using CF9 ORM for listing pages: HQL or SQL?使用 CF9 ORM 列出页面:HQL 还是 SQL?
【发布时间】:2010-08-20 11:15:09
【问题描述】:

我有一个 ORM 映射,它有:

杂志对象 与流派具有多对一的关系 以及与问题的一对多关系

我有一个管理页面,其中显示基本杂志信息列表、杂志类型(从链接的类型对象中查找)和当前存储的问题数量。

只要使用它就可以正常工作

EntityLoad('magazine');

...但是看一眼控制台日志显示它正在对杂志列表进行一次查询,一次查询以查找每个不同的流派名称,并对每本杂志进行一次查询以加载该杂志的所有问题(仅得到计数!)。随着数据集变得越来越大,这将对性能造成越来越大的影响。

当然,传统上我只需要一个连接的 SQL 查询,它会在一个查询中返回我需要的所有数据。有没有办法在 HQL 中实现同样的效果,还是使用标准 SQL 查询会更好?

我查看了 HQL 的“SELECT”语法,但它对用户不是很友好,因为它以数组数组的形式返回具有特定名称列的查询,使用起来不是特别愉快...

【问题讨论】:

    标签: orm coldfusion


    【解决方案1】:

    可以帮助解决此问题的方法是使用获取策略。基本上,您可以给 ORM 指令以使用连接来获取这些相关记录

    您必须在一对多关系上设置 fetch="join"。

    有关这方面的更多信息,请参阅: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSE01EDE03-6E6B-4669-8C54-358460778450.html

    【讨论】:

    • 谢谢特里 - 在这个 ORM 中,有很多选择可以学习!然而,这似乎并没有完成这项工作:查看日志,这在加载单个杂志实体时使用连接,但在加载所有杂志时,它仍然只是在主查询中加载杂志表......跨度>
    • 嗯,奇怪。您是否使用 CFDump 检查对象?如果是这样,那将否定所有惰性设置。 (这会导致更多的数据库查询。)
    • 不,不使用 CFDump。我只是在做一个 EntityLoad() 并且没有调用任何方法,并查看 SQLlog。如果您想看一下,我已将代码和日志放在gist.github.com/175d8979e0c7d2c455be...
    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多