【问题标题】:Runtime validation of jOOQ generated classes after schema update?模式更新后 jOOQ 生成的类的运行时验证?
【发布时间】:2012-12-15 13:43:54
【问题描述】:

我在构建过程中使用org.jooq.util.DefaultGenerator 来生成 jOOQ 类来表示我的数据库架构。

当应用程序运行时,架构预计会在应用程序不知道的情况下发生变化。此类更改可能与已生成的代码兼容,也可能不兼容。

如何在运行时检测生成的代码是否仍然对某个架构有效?

我正在寻找类似boolean stillValid = new SchemaValidator(existingGeneratedCodePath, jdbcUrl, jdbcProps).validate();的东西

【问题讨论】:

    标签: java sql validation code-generation jooq


    【解决方案1】:

    使用 org.jooq.Meta 的 jOOQ 3.0 解决方案

    在即将发布的 jOOQ 3.0 中,JDBC 的 DatabaseMetaData 可以通过新的 org.jooq.Meta 对象(通过功能请求 #1968 实现)以“jOOQ 方式”访问。该对象提供对这些类型的各种对象的访问:

    • org.jooq.Catalog
    • org.jooq.Schema
    • org.jooq.Table
    • org.jooq.Field
    • org.jooq.DataType

    这些可以与您生成的类进行比较,例如

    MY_SCHEMA.getTables().equals(create.meta().getTables())
    

    使用 JDBC DatabaseMetaData 的 jOOQ 2.x 解决方案

    上述方案可以手动实现,查询Connection.getMetaData()。当然,这将是更多的工作

    查询所有表的技巧

    另一个简单的解决方案是像这样查询所有生成的表:

    List<Table<?>> invalidTables = new ArrayList<>();
    
    for (Table<?> table : MY_SCHEMA.getTables()) {
        try {
            create.selectFrom(table).where(Factory.falseCondition()).fetch();
        }
    
        // If table names / column names change, the above query would fail
        catch (DataAccessException e) {
            invalidTables.add(table);
        }
    }
    

    这个技巧可以检测增量是否兼容

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 2012-09-10
      • 2017-10-06
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多