有没有办法强制jOOQ只按名称引用列,而不按索引引用列,并且不生成任何依赖于索引而不是名称的函数或属性?
我在jooq.org高级代码生成页面转了一圈,没有立即看到任何东西。希望我只是错过了。
出身背景
我开始jOOQ一个新的项目与现有的生产数据库比遭受一些手动DDL修改,特别是一些ALTER TABLE ADD COLUMN行李。因此,我的liquibase表定义在顺序上与实际生产定义不匹配。
我希望能够根据模式更改从头开始创建开发数据库,而不会有任何风险,即开发人员通过索引引用无效的列。
当我针对dev数据库生成代码时,我注意到当前生成的对象(基于生产数据库)在索引值和属性顺序方面存在许多差异。我几乎可以肯定这是因为数据库虽然有相同的列名,但顺序不同。
jOOQ内部使用列索引而不是名称,原因很简单:
ResultSet
中的命名列,但是它们都支持索引列Object[]
中的值在热循环中比在Map中查找该值快得多
由于这些原因,将jOOQ记录基于字段名而不是字段索引是不明智的。这也转化为代码生成器。投影
SELECT*
时,列的顺序可能与某些用例相关,例如与联合
操作符相关。SQL标准指定了联合对应的
,其中联合基于子查询的列名,而不是它们的索引。但据我所知,没有任何RDBMS支持这种语法。您可以按以下方式订购
如果不依赖于以上内容,可以使用
它必须实现
比较器
。因此,对于按字母顺序排列的简单情况,请写下:
public class AlphabeticOrderProvider implements Comparator<Definition> {
@Override
public int compare(Definition o1, Definition o2) {
return o1.getQualifiedInputName().compareTo(o2.getQualifiedInputName());
}
}
并将其提供给代码生成配置:
<configuration>
<generator>
<database>
<orderProvider>com.example.AlphabeticOrderProvider</orderProvider>
</database>
</generator>
</configuration>
您还可以直接在Liquibase迁移的基础上生成代码,每次在新模式上运行该迁移时,都应该生成相同的列顺序。从jOOQ 3.13开始(大约2020年第1季度),我们将支持以下现成的
Liquibase
:
https://www.jooq.org/doc/3.13/manual/code-generation/codegen-liquibase
其工作方式是jOOQ启动一个H2内存数据库,并在该数据库上运行整个Liquibase迁移,而不是在实际数据库上运行,Liquibase负责方言不可知性。我们还可以解析和转换您可能进行的任何本机SQL迁移。
这种方法显然假设您将签入生成的源,而不是在每个环境中重新生成它们。
我正在编写一个使用javafx FXML生成日志文件的程序。是否可以生成一组与仪器相关联的文本字段。示例:型号:Sn:Tg:Gas: 我需要收集每个仪器的信息,但有些地方有5个单位,有些只有1个。我正在寻找有字段生成从用户输入多少他们需要。这是我能做的吗?
问题内容: 我正在尝试将jOOQ包含在我的代码中,但是未生成任何代码。 执行时,不会生成任何源。我希望它创建一个在以下-file文件中定义的类。 我的pom.xml文件如下所示: 我假设应该使用适当的类来创建目录。Maven构建成功运行,没有任何错误。 您可以在此GitHub存储库中找到整个项目。 问题答案: 您正在使用内存数据库:。jOOQ代码生成器启动时,它将接收到一个空的 新 数据库,而不是
Jooq不生成类。我使用gradle插件https://github.com/etiennestuder/gradle-jooq-plugin使用postgresql 42.2.24。我的问题是什么?这是我的身材 输出任务:生成Jooq 在2s中成功构建1个可操作任务:1个已执行
我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢
在我从在线材料中找到的以下jooq片段中,有一个从“jooq结束于此”到“流开始”的转换 这是否意味着SQL查询生成发生,直到取得()?之后stream()启动,一切都在java进程内存中 或者像active record DSL这样的java 8流和整个代码段是否转换为SQL查询,包括stream()部分? 这是因为我已经看到了示例,其中sortBy/group pingBy是在许多在线示例的流
我试图使用JOOQ连接到HSQLDB,但我失败了,这里是错误消息: 此查询也会在HSQLDB Manager上失败(与JOOQ代码生成器的错误相同): 此查询工作正常: 我认为问题出在“cc”限定符上(在查询返回的“CONSTRAINT_NAME”字段上),这是HSQLDB错误吗? 我正在使用: HSQLDB 2.3.1 JOOQ 3.2.3 谢谢Ciccio