【问题标题】:Does it matter what Domain Object you execute a query on in grails在 grails 中执行查询的域对象是否重要
【发布时间】:2018-07-10 22:42:33
【问题描述】:

执行查询时使用什么域对象是否重要?例如,我有这两个域对象

Class A {
    String name
}

Class B {
    String name
}

如果我想获取所有 A 对象,我可以执行以下操作

A.executeQuery('FROM A')

但我也可以从不同的域对象调用相同的查询并得到完全相同的结果

B.executeQuery('FROM A')

这两个语句在性能方面有区别吗?也许在幕后发生的事情有所不同?

对于更多的上下文,我正在编写一个服务,应用程序将动态执行域对象的查询。所以我可以选择一个基础域对象并每次都执行它,或者我可以使用提供给方法的字符串来创建域对象的实例。

谢谢

【问题讨论】:

  • “或者我可以使用提供给方法的字符串创建域对象的实例” - 您不应该创建域对象的实例来执行查询。跨度>

标签: grails hql domain-object


【解决方案1】:

不,没关系。在这种情况下,它只是执行 HQL(休眠查询),并且任一域类在这方面对 executeQuery 的行为完全相同。

在您的特定情况下,我只使用一个域类来执行所有查询。无需更改类型。

【讨论】:

  • “在你的具体情况下,我只使用一个域类来执行所有查询。” - 这将是一件非标准且可能令人困惑的事情。仅使用 1 个域类来执行所有查询不是推荐的最佳做法。
【解决方案2】:

执行查询时使用什么域对象是否重要?

这取决于您使用的查询技术。对于executeQuery,尤其是它没有。对于大多数其他查询技术,它确实如此。例如,A.executeQuery('FROM A')B.executeQuery('FROM A') 相同。 A.list()B.list() 不同。 A.findAllByTitle('Tribe')B.findAllByTitle('Tribe') 不同,A.where { ... }B.where { ...} 不同等...

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2014-05-19
    • 2015-07-05
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多