无法从jooq中为SQL Server生成Information_schema

时间:2019-06-20 04:23:52

标签: java sql-server schema jooq

我正在使用Jooq试用版从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 个答案:

答案 0 :(得分:1)

出于历史原因,jOOQ-meta的SQLServerDatabase仅查询sys.objects表,而不查询sys.all_objects表,以对数据库进行反向工程。当然,应该对此进行更改。我为此创建了一个功能请求: https://github.com/jOOQ/jOOQ/issues/8827

已在jOOQ 3.12中实现

解决方法

与此同时,您有以下选择:

  • 扩展SQLServerDatabase以使其查询适应于从all_objects中获取objects,而不是从JDBCDatabase获取(专业版比免费试用版要简单得多,因为您会获取源代码,并有权修补源代码)
  • 使用DatabaseMetaData,它查询JDBC的sys。这也应该从INFORMATION_SCHEMAINFORMATION_SCHEMA模式中返回内容(但目前不提供对存储过程的访问权限)
  • 使用jOOQ-meta模块中生成的{{1}}表