2016-01-28 53 views
1

我使用jooq生成POJO我H2分贝表JOOQ产生POJO失踪GeneratedValue注释

CREATE TABLE PUBLIC.ABC (
    ID   BIGINT AUTO_INCREMENT PRIMARY KEY, 
    TRADE_DATE DATE, 
    STK_CODE VARCHAR(63), 
    REMARKS  TEXT, 
    TIMESTAMP TIMESTAMP NOT NULL 
); 

但(下同)

{ 

    ... 
    @Id 
    @Column(name = "ID", unique = true, nullable = false, precision = 19) 
    public Long getId() { 
     return this.id; 
    } 
    ... 

} 

缺少生成的代码@ GeneratedValue注释,这使得它不可能插入新的记录与春天的数据休息库,因为传入的对象总是抱怨没有设置id字段。

什么配置/变通办法可以让jooq正常工作?

下面是相关的POM文件部分我用在编译时产生的POJO:

<plugin> 
    <groupId>org.jooq</groupId> 
    <artifactId>jooq-codegen-maven</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>${h2.version}</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <!-- JDBC connection parameters --> 
     <jdbc> 
      <driver>org.h2.Driver</driver> 
      <url>jdbc:h2:${user.home}/</url> 
     </jdbc> 
     <!-- Generator parameters --> 
     <generator> 
      <database> 
       <name>org.jooq.util.h2.H2Database</name> 
       <includes>.*</includes> 
       <schemata> 
        <schema> 
         <inputSchema>PUBLIC</inputSchema> 
        </schema> 
       </schemata> 
      </database> 
      <target> 
       <packageName>org.abc</packageName> 
       <directory>target/generated-sources/jooq</directory> 
      </target> 
      <generate> 
       <pojos>true</pojos> 
       <jpaAnnotations>true</jpaAnnotations> 
      </generate> 
     </generator> 
    </configuration> 
</plugin> 

替代方法

最终去了替代品的路线,让任何低于插件代码在添加功能之前碰到同样的问题:

<plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.3</version> 
     <executions> 
      <execution> 
       <phase>prepare-package</phase> 
       <goals> 
        <goal>replace</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <basedir>${project.basedir}/${jooq.gen.dir}</basedir> 
      <filesToInclude>tables/pojos/*.java</filesToInclude> 
      <replacements> 
       <replacement> 
        <token>@Id</token> 
        <value>@Id @javax.persistence.GeneratedValue</value> 
       </replacement> 
      </replacements> 
     </configuration> 
    </plugin> 

回答

1

从第3.7条开始,这是一个缺失的功能。请参阅:https://github.com/jOOQ/jOOQ/issues/5009

您有几种解决方法选择:

  1. 使用search-replace Maven plugin通过@Id @javax.persistence.GeneratedValue(javax.persistence.GenerationType.IDENTITY)补丁生成的代码通过更换@Id(假设你的所有主键AUTO_INCREMENT
  2. 补丁jOOQ-CODEGEN的JavaGenerator“ s org.jooq.util.JavaGenerator.printColumnJPAAnnotation()方法并自己添加该代码。