Information_schema 未从 jooq for SQL Server 生成
Posted
技术标签:
【中文标题】Information_schema 未从 jooq for SQL Server 生成【英文标题】:Information_schema not getting generated from jooq for SQL Server 【发布时间】:2019-11-02 20:38:29 【问题描述】:我正在使用 Jooq Trial 作为 poc 从 SQL Server 数据库生成代码。我使用下面的配置。但是,它不会在编译过程中生成信息架构。
<plugin>
<groupId>org.jooq.trial</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>$jooq.version</version>
<executions>
<execution>
<id>jooq-codegen</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<skip>$skip.jooq.generation</skip>
</configuration>
</execution>
</executions>
<configuration>
<jdbc>
<driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
<url>$database.url</url>
<user></user>
<password></password>
</jdbc>
<generator>
<name>org.jooq.codegen.JavaGenerator</name>
<database>
<name>org.jooq.meta.sqlserver.SQLServerDatabase</name>
<includes>.*</includes>
<excludes></excludes>
<!--<inputSchema></inputSchema> --> <!-- This will generate all schema of db, better to only generate the one
interested in -->
<inputCatalog>scm</inputCatalog>
<schemata>
<schema>
<inputSchema>dbo</inputSchema>
</schema>
<schema>
<inputSchema>INFORMATION_SCHEMA</inputSchema>
</schema>
</schemata>
</database>
<target>
<packageName>org.blackdread.sqltojava.jooq</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
</generator>
</configuration>
<dependencies>
<dependency>
<groupId>org.jooq.trial</groupId>
<artifactId>jooq-meta</artifactId>
<version>$jooq.version</version>
</dependency>
<dependency>
<groupId>org.jooq.trial</groupId>
<artifactId>jooq-codegen</artifactId>
<version>$jooq.version</version>
</dependency>
<dependency>
<groupId>org.jooq.trial</groupId>
<artifactId>jooq</artifactId>
<version>$jooq.version</version>
</dependency>
</dependencies>
</plugin>
日志:
[INFO] 生成完成:scm.dbo:总计:1.493s,+0.333ms [INFO] [INFO] 不包括空架构:scm.INFORMATION_SCHEMA [INFO] 删除多余的文件
但是 information_schema 可以作为视图使用,它也向我返回了必要的信息。我正在使用 Windows 身份验证而不是 sa。
【问题讨论】:
【参考方案1】:由于历史原因,jOOQ-meta 的SQLServerDatabase
只查询sys.objects
表,而不是sys.all_objects
表,以对您的数据库进行逆向工程。当然,这应该改变。我为此创建了一个功能请求:
https://github.com/jOOQ/jOOQ/issues/8827
它已在 jOOQ 3.12 中实现
解决方法
与此同时,您有以下选择:
扩展SQLServerDatabase
以调整其查询以获取 rom all_objects
,而不是从 objects
(专业版比免费试用版要简单得多,因为您将获得源代码和修改源代码的权利)
改用JDBCDatabase
,它查询JDBC 的DatabaseMetaData
。这也应该返回来自 sys
和 INFORMATION_SCHEMA
模式的内容(但目前不提供对例如存储过程的访问权限)
使用在 jOOQ-meta 模块中生成的 INFORMATION_SCHEMA
表
【讨论】:
以上是关于Information_schema 未从 jooq for SQL Server 生成的主要内容,如果未能解决你的问题,请参考以下文章