我试图自动生成刀的视图。我已经预先设置了配置:
<generate>
<!--<deprecated>false</deprecated>-->
<daos>true</daos>
</generate>
whitch为表生成dao,但不为视图生成dao。根据文件规定:
如果您使用的是jOOQ的代码生成器,那么可以将其配置为为为您生成POJO和DAO。然后,jOOQ为每个UpdateRecord生成一个DAO,即为每个表生成一个单列主键。
和
公共接口
它表示来自表或视图的记录-表记录其基础表或视图具有“主唯一键”,即主键或至少一个唯一键jOOQ使用“主唯一键”执行可在可更新记录上执行的各种操作:
Witch基本上意味着DAO是为可更新的记录生成的,可更新的记录可以由表和视图生成。但是,不会为我的视图生成UpdateableRecord和键。有可能在视图上实现这一点吗?或者它不是故意的?
以下是我的一个观点
CREATE OR REPLACE VIEW test AS
SELECT test_table.id, test_table.test_id, test_table.foo
FROM private.test_table;
ALTER TABLE test
OWNER TO postgres;
GRANT ALL ON TABLE test TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE test TO viewers;
CREATE OR REPLACE RULE "TEST_INSERT" AS
ON INSERT TO test DO INSTEAD INSERT INTO private.test_table (test_id, foo)
VALUES (new.test_id, new.foo);
CREATE OR REPLACE RULE "TEST_UPDATE" AS
ON UPDATE TO test DO INSTEAD UPDATE private.test_table SET test_id = new.test_id, foo = new.foo
WHERE test_table.id = old.id;
P. S.
我自己怀疑它与文档中提到的“main unique key”有关,因为keys类中没有生成键。
使现代化
在收到一个有希望的答案后,下面是我的配置条目:
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>3.4.2</version>
<dependencies>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>regenerate-jooq-sources</id>
<phase>clean</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<!-- JDBC connection parameters -->
<jdbc>
<driver>org.postgresql.Driver</driver>
<url>
jdbc:postgresql://localhost:5432/core
</url>
<user>client</user>
<password>***</password>
</jdbc>
<!-- Generator parameters -->
<generator>
<name>org.jooq.util.DefaultGenerator</name>
<database>
<syntheticPrimaryKeys>SCHEMA\.TABLE\.COLUMN(1|2)</syntheticPrimaryKeys>
<overridePrimaryKeys>overrid_primmary_key</overridePrimaryKeys>
<name>
org.jooq.util.postgres.PostgresDatabase
</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>public</inputSchema>
</database>
<generate>
<!--<deprecated>false</deprecated>-->
<daos>true</daos>
<interfaces>true</interfaces>
</generate>
<target>
<packageName>
com.rfid.server.jooq
</packageName>
<directory>
${basedir}/src/main/java/
</directory>
</target>
</generator>
</configuration>
</execution>
</executions>
</plugin>
从jOOQ 3.5开始,jOOQ的代码生成器尚未检测到视图的底层主键信息(如果存在此类信息)。很少有数据库能够真正可靠地提供此类信息,因此,您引用的Javadoc可能有点误导。有关该主题的更多信息,请参见本问题:
如何从Oracle视图中发现基础主(或唯一)键列
但是,您可以使用
<!-- A regular expression matching all columns that participate in "synthetic" primary
keys, which should be placed on generated UpdatableRecords, to be used with
- UpdatableRecord.store()
- UpdatableRecord.update()
- UpdatableRecord.delete()
- UpdatableRecord.refresh()
Synthetic primary keys will override existing primary keys. -->
<syntheticPrimaryKeys>SCHEMA\.TABLE\.COLUMN(1|2)</syntheticPrimaryKeys>
<!-- All (UNIQUE) key names that should be used instead of primary keys on
generated UpdatableRecords, to be used with
- UpdatableRecord.store()
- UpdatableRecord.update()
- UpdatableRecord.delete()
- UpdatableRecord.refresh()
If several keys match, a warning is emitted and the first one encountered will
be used.
This flag will also replace synthetic primary keys, if it matches. -->
<overridePrimaryKeys>MY_UNIQUE_KEY_NAME</overridePrimaryKeys>
设置这些标志将把您生成的
记录
转换为Up数据库记录
,从而也将生成相应的DAO
关于这些代码生成标志的更多信息可以在这里找到:
http://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/
在Lukas Eder答案的帮助下,我解决了它,以下是配置的重要部分:
<database>
<!--force generating id'sfor everything in public schema, that has an 'id' field-->
<syntheticPrimaryKeys>public\..*\.id</syntheticPrimaryKeys>
<!--name for fake primary key-->
<overridePrimaryKeys>override_primmary_key</overridePrimaryKeys>
<name>
org.jooq.util.postgres.PostgresDatabase
</name>
<includes>.*</includes>
<excludes></excludes>
<inputSchema>public</inputSchema>
</database>
<generate>
<daos>true</daos>
</generate>
我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢
有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类
问题内容: 我正在尝试将jOOQ包含在我的代码中,但是未生成任何代码。 执行时,不会生成任何源。我希望它创建一个在以下-file文件中定义的类。 我的pom.xml文件如下所示: 我假设应该使用适当的类来创建目录。Maven构建成功运行,没有任何错误。 您可以在此GitHub存储库中找到整个项目。 问题答案: 您正在使用内存数据库:。jOOQ代码生成器启动时,它将接收到一个空的 新 数据库,而不是
我使用jOOQ程序代码生成数据库,但现在我遇到了一些问题。在数据库中,我有表A和表B。第一次都生成了pojo、dao、接口等。经过一段时间的开发,我发现表A需要添加一些字段或修改一些字段,所以我不得不再次编码,然后jOOQ代码生成器将覆盖现有的代码,这让我很难过。当我在排除表的情况下使用“排除A”时,发现只生成了表A的数据,表B将被删除。我不知道如何处理这个问题。我的代码生成器如下:
Jooq不生成类。我使用gradle插件https://github.com/etiennestuder/gradle-jooq-plugin使用postgresql 42.2.24。我的问题是什么?这是我的身材 输出任务:生成Jooq 在2s中成功构建1个可操作任务:1个已执行
是否有任何参数可以在jooq代码生成期间打开/关闭下一个查询的执行? 在有大量模式和对象的数据库上,执行大约需要一个小时