JOOQ继续将架构设置为默认PUBLIC

时间:2018-08-10 13:56:36

标签: jooq

我的gradle.build(使用nu.studer.jooq插件)

jooq {
    MyProject(sourceSets.main) {
        generator {
            database {
                name = 'org.jooq.meta.extensions.ddl.DDLDatabase'
                properties {
                    property {
                        key = 'scripts'
                        value = 'src/main/resources/database.sql'
                    }
                }
                inputSchema = ''
                outputSchema = 'something'
//                schemata {
//                    schema {
//                        inputSchema = ""    // I've tried this too
//                        outputSchema = 'something'
//                    }
//                }
                forcedTypes {
                    forcedType {
                        name = 'varchar'
                        expression = '.*'
                        types = 'JSONB?'
                    }
                    forcedType {
                        name = 'varchar'
                        expression = '.*'
                        types = 'INET'
                    }
                }
            }
            generate {
                relations = true
                springAnnotations = true
                deprecated = false
                fluentSetters = true
                // ...
            }
            target {
                packageName = 'com.springforum'
            }
        }
    }
}

在构建过程中,它可以很好地生成模式,但是即使我设置了outputSchema(我尝试使用空字符串和非空字符串),它仍将PUBLIC模式用于输出)


更新:仅当inputSchema为空时,才会出现问题,我尝试了另一种具有模式的sql脚本,它可以按预期工作

1 个答案:

答案 0 :(得分:2)

这是一个已知问题,其原因是,DDLDatabase在后​​台使用H2内存数据库来模拟正在运行的SQL脚本,然后对H2数据库进行反向工程。默认情况下,在H2(和其他一些数据库)中,所有内容都以PUBLIC模式进行。问题在这里:#7650

jOOQ 3.11解决方法

当前(从jOOQ 3.11开始),我建议您要么在DDL脚本中明确指定架构,要么使用inputSchema = "PUBLIC",了解以上内容。

jOOQ 3.12解决方案

在jOOQ 3.12中,此问题已通过#7759解决。可以指定不合格架构对象的行为:

<!-- The default schema for unqualified objects:
     - public: all unqualified objects are located in the PUBLIC (upper case) schema
     - none: all unqualified objects are located in the default schema (default) 

     This configuration can be overridden with the schema mapping feature -->
<property>
  <key>unqualifiedSchema</key>
  <value>none</value>
</property>