我在构建过程中使用org.jooq.util.DefaultGenerator来生成jOOQ类来表示我的数据库模式。
当应用程序运行时,模式可能会在应用程序不知道的情况下更改。此类更改可能与已生成的代码兼容,也可能与已生成的代码不兼容。
如何在运行时检测生成的代码是否对特定模式仍然有效?
我正在寻找类似于布尔值stillValid=new SchemaValidator(存在的GeneratedCodePath, jdbcUrl, jdbcProps)的东西. valester();
在即将到来的jOOQ 3.0中,可以通过一个新的org.jooq.Meta对象(通过功能请求#1968实现)以jOOQ方式访问JDBC的数据库MetaData。此对象提供对以下类型的各种对象的访问:
org。约克。目录
org。约克。模式
org。约克。表
org。约克。字段
org。约克。数据类型
这些可以与您生成的类进行比较,例如:
MY_SCHEMA.getTables().equals(create.meta().getTables())
上述解决方案可以通过查询连接手动实现。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);
}
}
此技巧允许检测增量是否兼容
问题内容: 我在构建过程中使用来生成jOOQ类来表示我的数据库模式。 当应用程序运行时,架构可能会在应用程序不知道的情况下发生更改。这样的更改可能与已经生成的代码兼容,也可能与之不兼容。 如何在运行时中检测生成的代码是否仍然在特定模式下有效? 我正在寻找类似的东西 问题答案: 使用org.jooq.Meta的jOOQ 3.0解决方案 在即将到来的jOOQ 3.0中,可以通过新对象(通过功能请求#1
我需要在应用程序启动时检查当前在数据库中的数据库模式和以前用于JOOQ生成模型的模式是相同的。我试图使用这里建议的解决方案,发现了一些问题: 查询所有表的技巧:这种解决方案不检查列类型,只检查表名和字段名,但我也需要检查类型 :此处仅检查架构和名称,不再检查列类型 我试图使用中可用的信息并手动进行比较,但遇到了另一个问题。在某些情况下,生成字段的数据类型和运行时从检索的字段不匹配。 例如,无时区默
我找了很长时间,所以在标记为重复之前,请务必阅读。 我有一个函数(),它是用一个参数调用的。我想将该id作为前缀添加到每个日志消息中。每次调用函数时,它都会更改。因此,我想更新记录器模式,将此id添加为前缀。 我读过: 如何配置 如何重新配置 SO和log4j论坛上的许多帖子都在讨论如何在运行时更改配置。它们要么过时,要么根本不起作用。 以下代码基于 log4j2 文档。它打印: 如果我注释掉行然
我希望 jOOQ 基于我提供的库架构 xml 文件(而不是基于 db 连接)自动生成代码。如果我更改了 liquibase xml 文件中的某些内容,则更改将反映在数据库中,但我无法生成自动生成的新代码。我必须运行两次mvn干净编译,以便jOOQ了解更改。 我pom.xml的发电机部分是这样的。请帮助:
Dave使用Flyway为Alice和Bob初始化模式,因此他们都有foo table和bar函数。Dave使用jOOQ生成java api,并在运行时将开发模式映射到用户模式。戴夫以前和他的任何一个客户都没有关系,突然发现自己是鲍勃的侄子。 但是爱丽丝和鲍勃后来都回来找戴夫,让他为他们写一些自动化。因此,Dave决定创建一个机器用户Rob,他可以访问Alice和Bob的模式。他可以重用所有相同的
Jooq不生成类。我使用gradle插件https://github.com/etiennestuder/gradle-jooq-plugin使用postgresql 42.2.24。我的问题是什么?这是我的身材 输出任务:生成Jooq 在2s中成功构建1个可操作任务:1个已执行