Im пытается автогенерировать dao для просмотра. Я предварительно установил конфигурацию:JOOQ генерирует DAO для просмотра
<generate>
<!--<deprecated>false</deprecated>-->
<daos>true</daos>
</generate>
whitch генерирует dao для таблиц, но не для просмотров. Согласно документации говорится:
Если вы используете генератор кода jOOQ, вы можете настроить его, чтобы генерировать POJO, и объектов DAO для вас. Затем jOOQ генерирует один DAO для UpdatableRecord, то есть для таблицы с первичным ключом с одним столбцом.
и
общедоступный интерфейс
UpdatableRecord<R extends UpdatableRecord<R>>
расширяетTableRecord<R>
Общий интерфейс для записей, которые могут быть сохранены обратно в базу данных снова. Любая запись может быть обновляемой, еслиона представляет собой запись из таблицы или представлений - это TableRecord его базовой таблицы или представление имеет «главный уникальный ключ», то есть первичный ключ или, по меньшей мере, один уникальный ключ продукт " основной уникальный ключ»используется jOOQ для выполнять различные операции, которые могут быть выполнены на UpdatableRecord:
Ведьма в основном означает, что DAO генерируются для обновляемых записей, и обновляемые записи можно с помощью таблиц и представлений. Однако UpdatableRecord и Keys не генерируются для моих просмотров. Можно ли вообще этого добиться? Или это не значит?
Вот один из моих взглядов
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.
У меня есть собственное подозрение, что что-то делать с «основной уникальный ключ» упоминается в документации, потому что никакие ключи не генерируются в Keys класса.
UPDATE
После многообещающего ответ я получил, вот моя запись конфигурации:
<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>
Вы не * действительно * сохраняете '<синтетическиеPrimaryKeys> SCHEMA \ .TABLE \ .COLUMN (1 | 2) синтетическиеPrimaryKeys>' так, не так ли? Вы должны указать регулярное выражение, соответствующее вашим фактическим именам столбцов ... –