我有一个 Grails 应用程序,它将针对 SQL Server 或 Oracle 后端运行。我使用 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 无法正确启动。
我努力了:
我应该如何配置我的数据库定义和 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
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)