2014-12-08 3 views
2

보기에서 자동으로 DAO를 생성하려고합니다. 구성 미리 설정을 완료했습니다.JOOQ가보기 용 DAO를 생성합니다.

      <generate> 
           <!--<deprecated>false</deprecated>--> 
           <daos>true</daos> 
          </generate> 

테이블에는 DAO가 생성되지만보기에는 생성되지 않습니다. 문서에 따르면 :

jOOQ의 코드 생성기를 사용하는 경우 POJO 및 DAO를 생성하도록 구성 할 수 있습니다. 그런 다음 jOOQ는 UpdatableRecord 당 하나의 DAO를 생성합니다. 즉, 단일 열 기본 키가있는 테이블 당 하나의 DAO를 생성합니다.

공용 인터페이스 UpdatableRecord<R extends UpdatableRecord<R>>TableRecord<R> 다시 데이터베이스에 저장 될 수있는 레코드에 대한 공통 인터페이스를 확장합니다.

가 테이블 또는 뷰에서 레코드 나타내는 경우 모든 기록은 갱신 할 수 있습니다 - TableRecord의 기본 테이블 또는 뷰를 기본 키 또는 적어도 하나의 고유 키 "즉"주 고유 키 "를 가지고 테이블 및 뷰 모두

마녀 기본적 DAO의이 갱신 기록 용으로 생성되는 것을 의미하며, 갱신 레코드 수 : 에 jOOQ 의해 사용되는 주요 고유 키 "는 UpdatableRecord에서 수행 할 수있는 다양한 동작을 수행한다. 그러나 내보기에는 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.입니다 더 키가 클래스에서 생성되지 않기 때문에

나는 그것이 "주요 고유 키"문서에 언급 된 함께 할 수있는 뭔가가 그 것을 내 자신의 의심을 가지고있다.

 <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> 
+0

그런 식으로, 당신은 정말로 SCHEMA \ .TABLE \ .COLUMN (1 | 2)를 보관하지 않았습니까? 실제 열 이름과 일치하는 정규 표현식을 지정해야합니다 ... –

답변

1

jOOQ 3.5로, jOOQ의 코드 생성기는 아직 뷰의 기본이되는 기본 키 정보를 감지하지 않습니다

내가받은 유망 대답 한 후 UPDATE

, 여기에 내 구성 항목의 그러한 정보가 존재하는 경우. 일부 데이터베이스는 실제로 이러한 정보를 안정적으로 제공 할 수 있으므로 아마도 Javadoc이 약간 오도하는 것일 수 있습니다. 그 주제에 대한 자세한 내용은이 질문에서 찾을 수 있습니다

How to discover the underlying primary (or unique) key columns from an Oracle view

은 그러나 추가 키 정보를 생성하는 <syntheticPrimaryKeys> 플래그를 사용하여 코드 생성기에 대한 기본 키를 지정하거나 <overridePrimaryKeys>을 사용할 수 있습니다 플래그는 뷰의 기본 키로 (구체화 된) 뷰에 배치 된 고유 키를 사용합니다.

<!-- 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> 

집니다 이러한 플래그를 설정하여 이러한 코드 생성 플래그에 DAOs

더 많은 정보를 해당 생성 UpdatableRecordsRecords, 따라서 생성 여기에서 찾을 수 있습니다 :

http://www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/

+0

jusst가 무엇인지 찾고 있습니다. –

+0

내가 뭘 잘못하고 있는지 모르겠지만 지금은 여러 데이터를 생성합니다. ** 모든 ** postgres 스키마 pg_catalog와 같은,하지만 여전히 나던 작품보기 ... 내 구성 파일에 대한 내 질문의 업데이 트를 참조하십시오 –

+0

요소로 어쩌면 내가 여기서부터 완전한 구성을 추가해야합니다 : http://www.jooq.org/doc/3.4/manual-single-page/? ... –

3

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> 
+0

아마도''설정이 필요 없습니다. 기존의 고유 키와 일치하고 기본 키를 고유 키로 바꿉니다. –