【问题标题】:Grails & GORM: How to specify CREATE INDEX equivalent on a domain-class?Grails & GORM:如何在域类上指定 CREATE INDEX 等效项?
【发布时间】:2012-12-13 07:13:57
【问题描述】:

我可以分享一下我的挫败感吗? GORM(和 Grails ..)似乎有一个非常有限的关于数据库索引的文档。当我希望索引不仅仅是此处记录的内容时,我还没有从任何地方找到有关如何为域类创建索引的任何帮助:http://grails.org/doc/latest/guide/GORM.html

以下是我希望通过 Grails 实现的 SQL 方式:

CREATE INDEX very_fast_index 
ON slow_table(date DESC NULLS LAST) 
WHERE is_latest = true;

似乎我可以告诉 GORM 为日期列创建索引。但看起来有零选项可以添加其他标准。

因为我讨厌简单的事情变得极其复杂,所以我在 PostgreSQL CLI 中手动创建了这些索引。不是来自 Grails,它会更便携。我不想写任何 HQL,因为我也不喜欢这种想法。

有什么想法吗?我只有手动方式。

【问题讨论】:

    标签: sql grails indexing grails-orm


    【解决方案1】:

    HQL 是 Data manipulation language 而非 Data definition language,因此对您的需求没有用处。如果您想使用数据库供应商特定的功能,您必须绕过休眠并使用较低级别的 jdbc 连接来执行 SQL 查询。在 grails 中,您可以使用 dataSource bean 来查询 the groovy way。当然,这会使您紧贴特定数据库(在您的情况下为 Postgres)。

    【讨论】:

    • 您提供的 GORM 链接包含在我的问题中,正如我所说,它没有提供任何帮助。您将如何在 Grails 域类中使用 HQL 索引功能?
    • HQL 无法创建索引。 HQL 用于选择更新或删除数据库上的行而不是创建行。所有数据库和休眠都不支持创建索引中的 where 子句。如果你想在 grails 中执行它,你必须使用 dataSource jdbc 连接对象进行行 sql 查询。
    • 修复我的评论...HQL 用于选择更新或删除数据库上的行而不是更改数据库架构...
    • 好点。您能否编辑您的答案以涵盖您提到的内容,以便我可以将其标记为答案?您提到的那些事情会将选择范围缩小到自定义 SQL 脚本(可能是纯 Java 和 SQL),并将应用程序绑定到某个 DBMS。
    猜你喜欢
    • 2012-01-23
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多