gpt4 book ai didi

grails - GORM : mapping large text fields database agnostically

转载 作者:行者123 更新时间:2023-12-02 13:52:34 26 4
gpt4 key购买 nike

我有一个将针对 SQL Server 或 Oracle 后端运行的 Grails 应用程序。我正在使用 GORM 作为 ORM。

我想以支持两种数据库类型的方式映射一个大文本字段。在我的 Grails 域类中,我有类似的内容:

class Note {
String content

static constraints = {
content nullable: false, blank: false
}
}

然后我声明如下所示的数据库表:
-- oracle
CREATE TABLE NOTE
(
id NUMBER(19, 0) NOT NULL,
version NUMBER(19, 0) NOT NULL,
content CLOB NOT NULL
);

-- SQL Server
CREATE TABLE NOTE
(
id NUMERIC(19, 0) NOT NULL,
version NUMERIC(19, 0) NOT NULL,
content NVARCHAR(MAX) NOT NULL
);

GORM 正在运行 validate启动模式,我找不到 Oracle 和 SQL Server 数据类型和 GORM 映射的组合,这些映射允许存储或大型文本字段没有 GORM 无法正确启动。

我试过了:
  • 将类型设置为 textmappings ,但这似乎不起作用。 Oracle 提示期待 content字段类型为 long ,而 SQL Server 需要 text 的类型在这些情况下。
  • 设置 typeclob ,它通过了模式验证,但不允许我将该字段设置为字符串值 - GORM 需要 CLOB 类型的数据.

  • 我应该如何配置我的数据库定义和 GORM 以使其工作?

    最佳答案

    尽管有点骇人听闻,但最终还是出现了一个解决方案:通过在启动时查询 Grails 配置,您可以选择合适的数据类型。

    class Note {

    String content

    static constraints = {
    content nullable: false, blank: false
    }

    static mappings = {
    content sqlType: DbSupport.bigStringType
    }
    }

    class DbSupport {

    static def getBigStringType() {

    // examine which hibernate dialect is selected, and pick
    // an appropriate type mapping for that database type:
    def dialect = ApplicationHolder.application.config.dataSource.dialect
    switch (dialect) {

    case "org.hibernate.dialect.SQLServerDialect":
    return "nvarchar"
    break

    case "org.hibernate.dialect.Oracle10gDialect":
    return "clob"
    break
    }

    }
    }

    关于grails - GORM : mapping large text fields database agnostically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420081/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com