SQL Server 2017 - генерация кода JOOQ с помощью Gradle - PullRequest
0 голосов
/ 29 января 2019

Я из мира MySQL, и генерация кода с использованием JOOQ всегда была легкой задачей.Вывод будет хорошо вписываться в мое имя целевого пакета.Теперь у меня есть этот проект, где мне нужно использовать SQL Server 2017 в качестве основной базы данных.Я купил лицензию JOOQ и смог настроить Gradle для работы с ней.Flyway работает как чудо, но по какой-то причине я застрял в процессе генерации кода JOOQ.

Я знаю, что схемы и таблицы MySQL - одно и то же, но не в SQL Server.Все мои таблицы используют DBO в качестве схемы по умолчанию и расположены в корне моего каталога таблиц в базе данных.

Теперь проблема.Когда я запускаю generateJooqSchemaSource, JOOQ начнет генерировать код для всех таблиц в базе данных, включая [master] и [msdb], даже если я указал имя своей базы данных в URL-адресе соединения.Процесс генерации кода должен быть нацелен только на указанную мной базу данных.

Есть идеи, как это исправить?

Вот мой файл сборки gradle:

buildscript {
    repositories {
        mavenLocal()
        jcenter()
        dependencies {
            classpath 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
        }
    }
}

plugins {
    id 'java'
    id 'eclipse'
    id 'idea'
    id 'org.springframework.boot' version '2.1.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.6.RELEASE'
    id 'nu.studer.jooq' version '3.0.2'
    id 'org.flywaydb.flyway' version '5.1.4'
}

group 'org.test.security'
version '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    jcenter()
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework.boot:spring-boot-starter-parent:2.1.2.RELEASE'
    }
}

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-security'

    implementation 'org.flywaydb:flyway-core:5.2.4'
    implementation 'org.apache.poi:poi:4.0.1'
    implementation 'org.apache.poi:poi-ooxml:4.0.1'

    implementation 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
    implementation 'org.firebirdsql.jdbc:jaybird-jdk17:3.0.5'

    implementation 'org.jooq.pro:jooq:3.11.9'
    implementation 'org.jooq.pro:jooq-meta:3.11.9'
    implementation 'org.jooq.pro:jooq-codegen:3.11.9'

    compileOnly 'org.springframework.boot:spring-boot-configuration-processor'

    jooqRuntime 'com.microsoft.sqlserver:mssql-jdbc:7.0.0.jre8'
    jooqRuntime 'org.firebirdsql.jdbc:jaybird-jdk17:3.0.5'

    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

jooq {
    version = '3.11.9'
    edition = 'PRO'
    master(sourceSets.main) {
        jdbc {
            driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase"
            user = "sa"
            password = "admin123"
        }
        generator {
            database {
                name = "org.jooq.meta.sqlserver.SQLServerDatabase"
                inputSchema = "dbo"
            }
            generate {
                relations = true
                deprecated = false
                records = true
                immutablePojos = true
                fluentSetters = true
            }
            target {
                packageName = 'org.test.security.database.master'
                directory = 'target/generated-src'
            }
        }
    }
}

flyway {
    url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase"
    user = "sa"
    password = "admin123"
    table = "Schema_History"
}

1 Ответ

0 голосов
/ 30 января 2019

По умолчанию jOOQ генерирует код для всех каталогов (баз данных) и всех схем.Если вы хотите ограничить генерацию кода только одной базой данных, вам нужно указать inputCatalog, возможно, вместе с inputSchema.Некоторые подробности можно найти на этой странице

Другими словами, напишите

database {
    name = "org.jooq.meta.sqlserver.SQLServerDatabase"
    inputCatalog = "my_database_here"
    inputSchema = "dbo"
}
...