我org.jooq.util.DefaultGenerator在构建过程中使用来生成jOOQ类来表示我的数据库模式。
org.jooq.util.DefaultGenerator
当应用程序运行时,架构可能会在应用程序不知道的情况下发生更改。这样的更改可能与已经生成的代码兼容,也可能与之不兼容。
如何在运行时中检测生成的代码是否仍然在特定模式下有效?
我正在寻找类似的东西 boolean stillValid = new SchemaValidator(existingGeneratedCodePath, jdbcUrl, jdbcProps).validate();
boolean stillValid = new SchemaValidator(existingGeneratedCodePath, jdbcUrl, jdbcProps).validate();
在即将到来的jOOQ 3.0中,DatabaseMetaData可以通过新org.jooq.Meta对象(通过功能请求#1968实现)以“ jOOQ方式”访问JDBC 。该对象提供对这些类型的各种对象的访问:
DatabaseMetaData
org.jooq.Meta
org.jooq.Catalog
org.jooq.Schema
org.jooq.Table
org.jooq.Field
org.jooq.DataType
这些可以与您生成的类进行比较,例如
MY_SCHEMA.getTables().equals(create.meta().getTables())
上面的解决方案可以手动实现,只需查询即可Connection.getMetaData()。当然,还要多做一些工作
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); } }
这个技巧将允许检测增量是否兼容