Grails - 条件映射

时间:2012-02-23 09:29:37

标签: grails gorm grails-domain-class

目前我正在开发一个使用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没有给我两次映射的可能性。

1 个答案:

答案 0 :(得分:1)

我不知道grails是否允许您为id生成配置编码映射,但我认为您可能不需要使用序列或标识,并使用其他hibernate id生成器策略:http://grails.org/doc/1.3.7/ref/Database%20Mapping/id.html

编辑:

回顾hibernate文档我发现可以根据数据库的容量使用序列或标识,来自http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id

  

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

     

...

     

<强>天然

     

根据能力选择身份,序列或hilo   底层数据库。

所以你可能需要这样的配置:

static mapping = {
    id generator:'native'
}