Jooq продолжает устанавливать схему по умолчанию public

Мой 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'
            }
        }
    }
}

В процессе сборки он может отлично сгенерировать схему, но он продолжает использовать схему PUBLIC для вывода, хотя я установил outputSchema (я пробовал использовать пустую строку и непустую строку)


Обновление: проблема возникает только в том случае, если inputSchema пуст, я пробовал использовать другой скрипт sql со схемой, и он работает по назначению

Почему вы оставляете inputSchema пустым? Это не разрешено. Но чего вы хотите этим добиться?

Lukas Eder 13.08.2018 13:20

потому что мой файл sql не использует схему (которая генерируется из pg_dump и не имеет параметров для ее изменения), например: CREATE TABLE table_name () ;. Я решил проблему, добавив схему вручную, но надеюсь, что есть способ позволить мне это сделать.

cdxf 13.08.2018 14:11

Понятно, у меня плохо. Я упустил из виду, что вы используете DDLDatabase

Lukas Eder 13.08.2018 15:45
1
3
521
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это известная проблема, которая возникает из-за того, что за кулисами 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>

Спасибо за ответ, я попробовал еще раз с inputSchema = "PUBLIC", и проблема устранилась. Еще не пробовал решение Jooq 3.12.

cdxf 15.08.2018 13:49

Другие вопросы по теме