我正在处理grails应用程序。我必须使用H2进行开发,使用Oracle进行测试和生产。在使用Oracle时,我必须为每个域类/表使用单独的序列,因此我在我的域类中使用了以下内容:
static mapping = {
id (generator:'sequence', params:[sequence:'SOME_SEQUENCE'])
}
但后来我无法使用H2。当我尝试使用用户界面创建新的时,我收到唯一索引或主键违规错误。
如何使这种映射仅适用于生产和测试环境并保留开发默认值?我使用Grails 1.3.7。
答案 0 :(得分:4)
我遇到了同样的问题。您还可以通过在BootStrap.groovy文件中使用特定于环境的设置在h2中创建序列来解决此问题。在我的情况下,我没有太多的序列,我需要集成测试,我不想混淆我的域类与环境特定的编码。这是我的BootStrap。这对我很好:
import groovy.sql.Sql
class BootStrap {
def dataSource
def init = { servletContext ->
environments {
test {
Sql sql = new Sql(dataSource)
sql.execute("create sequence if not exists SOME_SEQUENCE")
}
}
}
}
答案 1 :(得分:2)
对于以下情况,您可以在mapping
块中嵌入逻辑:
import grails.util.Environment
class MyDomainClass {
...
static mapping = {
if (!Environment.isDevelopmentMode()) {
id (generator:'sequence', params:[sequence:'SOME_SEQUENCE'])
}
}
}