Grails-条件映射

Grails-条件映射,grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,目前,我正在开发一个使用Oracle作为数据库的webapp。我已经被告知我的webapp也必须在Sybase ASE上工作。我的Oracle数据库使用序列生成ID,我映射域类以使用这些序列。据我所知,Sybase ASE没有序列,只有身份。这是我的问题。如何处理代码/配置以使用Oracle和Sybase。每个域的ID的一些“条件映射”就可以了 我只是不想每次为已映射的其他数据库构建webapp时都对映射中的行进行注释/取消注释有人知道该怎么办吗? 还有另一个危险:Oracle和Sybase之间

目前,我正在开发一个使用Oracle作为数据库的webapp。我已经被告知我的webapp也必须在Sybase ASE上工作。我的Oracle数据库使用序列生成ID,我映射域类以使用这些序列。据我所知,Sybase ASE没有序列,只有身份。这是我的问题。如何处理代码/配置以使用Oracle和Sybase。每个域的ID的一些“条件映射”就可以了

我只是不想每次为已映射的其他数据库构建webapp时都对映射中的行进行注释/取消注释有人知道该怎么办吗?

还有另一个危险:Oracle和Sybase之间的另一个差异会影响映射(我不使用
dbCreate=“create”
)生成数据库结构)。在这一点上,我什么也看不到有什么经验吗?


编辑: 事实证明,不可能为两个数据库创建一个映射。我的Oracle结构在列名和表名中使用引号。Sybase ASE中不允许使用和引号。在某些特定平台上构建webapp时,我的(不好也不漂亮)解决方案正在更改(注释/取消注释)映射


顺便说一句,我是Grails的超级粉丝,这种映射方式似乎是一个缺点。如果我使用“纯”Hibernate,我会在xml文件中有两个映射,并且会根据底层数据库对它们进行更改。但是Grails没有给我两个映射的可能性。

我不知道Grails是否允许您为id生成配置密码映射,但我认为您可能不需要使用序列或标识,而需要使用其他hibernate id生成器策略:

编辑:

查看hibernate文档,我发现可以根据数据库容量使用序列或标识符,从:

所有生成器都实现该接口 org.hibernate.id.IdentifierGenerator。这是一个非常简单的界面。 有些应用程序可以选择提供自己的专用 然而,Hibernate提供了一系列内置的 实现。内置生成器的快捷方式名称如下所示 如下:

本地的

根据功能选择标识、序列或hilo 底层数据库

因此,您可能需要这样的配置:

static mapping = {
    id generator:'native'
}

我不知道grails是否允许您为id生成配置密码映射,但我认为您可能不需要使用序列或标识,而需要使用其他hibernate id生成器策略:

编辑:

查看hibernate文档,我发现可以根据数据库容量使用序列或标识符,从:

所有生成器都实现该接口 org.hibernate.id.IdentifierGenerator。这是一个非常简单的界面。 有些应用程序可以选择提供自己的专用 然而,Hibernate提供了一系列内置的 实现。内置生成器的快捷方式名称如下所示 如下:

本地的

根据功能选择标识、序列或hilo 底层数据库

因此,您可能需要这样的配置:

static mapping = {
    id generator:'native'
}

听起来不错!当我安装完Sybase后,我会尝试它。不幸的是,我无法检查它是否有效。我相信是的,但是。。。我的Oracle id名称被引用(如“SomeTableID”)。Sybse ASE不允许在列/表名中使用引号。这就是我所害怕的。我不能为两个数据库都设置一个映射。听起来不错!当我安装完Sybase后,我会尝试它。不幸的是,我无法检查它是否有效。我相信是的,但是。。。我的Oracle id名称被引用(如“SomeTableID”)。Sybse ASE不允许在列/表名中使用引号。这就是我所害怕的。我不能为两个数据库都创建一个映射。