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