从文件生成JOOQ Schema

时间:2015-06-22 08:50:10

标签: java jooq

可以在没有数据库连接的情况下使用sql文件中的JOOQ生成Java类吗? 我试图指定inputSchema标记,但我得到了异常:

WARNING: SQL exception            : Exception while executing meta query: Cannot execute query. No Connection configured

我的配置如下:

<configuration>
                <generator>
                    <database>
                        <name>org.jooq.util.postgres.PostgresDatabase</name>
                        <inputSchema>filesystem:src/main/resources/schema.sql</inputSchema>
                        <includes>.*</includes>
                        <outputSchemaToDefault>true</outputSchemaToDefault>
                    </database>
                    <target>
                        <packageName>pckg.some</packageName>
                        <directory>target/generated-sources/jooq</directory>
                    </target>
                </generator>
</configuration>

1 个答案:

答案 0 :(得分:3)

是的,你可以做这些事,虽然不是你想象的那样。首先,jOOQ不允许您解析SQL语句并以这种方式派生模式元信息。这将是复杂的实现当前所有20个支持的RDBMS的方法。

但是,您有两个选择:

1。在代码生成之前运行SQL文件

如果您的SQL文件与数据库供应商无关,则可以在H2等嵌入式数据库中运行该文件,然后从该数据库运行代码生成器。

此博客文章中描述了一种类似的方法,其中JPA注释的Java文件用于使用Hibernate生成这样的模式,然后运行jOOQ生成器: http://vladmihalcea.com/jooq-facts-from-jpa-annotations-to-jooq-table-mappings

2。使用中间XML文件

jOOQ支持从XML文件(或其他元数据源)加载模式元信息。从手册:

<!-- This value can be used to reverse-engineer standard jOOQ-meta XML formats

         org.jooq.util.xml.XMLDatabase

     You can also provide your own org.jooq.util.Database implementation
     here, if your database is currently not supported -->
<name>org.jooq.util.oracle.OracleDatabase</name>

可以在此处找到要传送到XMLDatabase的XML文件的XSD架构: http://www.jooq.org/xsd/jooq-meta-3.5.4.xsd

另见: http://www.jooq.org/doc/latest/manual/code-generation/codegen-configuration