2015-12-08 74 views
1

我试图让jooq代码生成器,用下面的选项JOOQ代码生成器,H2 AUTO_INCREMENT PK与

<generate> 
    <pojos>true</pojos> 
    <jpaAnnotations>true</jpaAnnotations> 
</generate> 

为表工作japAnnotations:

CREATE TABLE PUBLIC.MSG_LOG (
    ID    BIGINT AUTO_INCREMENT PRIMARY KEY, 
    IN_DATASOURCE VARCHAR(63), 
    OUT_DATASOURCE VARCHAR(63), 
    MSG   VARCHAR(255), 
    TIMESTAMP  TIMESTAMP NOT NULL 
); 

当我运行的代码低于

MsgLogRecord msgLog = dslContext.newRecord(MsgLog.MSG_LOG); 
msgLog.setInDatasource(inputSource); 
msgLog.setOutDatasource(outputSource); 
msgLog.setMsg(Joiner.on("").skipNulls().join(message)); 
msgLog.setTimestamp(Timestamp.valueOf(LocalDateTime.now())); 
msgLog.store(); 

它抛出一个错误,抱怨ID为空,但相同的代码工作,如果我只是简单地从jooq的生成器配置中移动<jpaAnnotations>true</jpaAnnotations>。当我看着生成的类,似乎MsgLogRecord类缺少@Generated注释,

/** 
* Getter for <code>PUBLIC.MSG_LOG.ID</code>. 
*/ 
@Id 
@Column(name = "ID", unique = true, nullable = false, precision = 19) 
public Long getId() { 
    return (Long) getValue(0); 
} 

可以在任何建议为它的位置吗?

+0

看起来你已经找到了解决方案,你的问题 - 很好的抓住!你知道你可以在堆栈溢出回答你自己的问题吗?这样,未来的访问者有同样的问题将很容易找到解决方案作为答案... –

+1

谢谢!我已经添加了一个答案,任何人遇到相同的问题 – John

+0

完美,感谢记录这一点,约翰。这对其他人肯定会有用 –

回答

1

原来,这是我的JPA设置的问题,因为我使用的是spring引导。

默认的hibernate有spring.jpa.hibernate.ddl-auto属性设置为create-drop,由于某种原因它将H2从SEQUENCE对象中删除......我将它设置为none,代码正在工作。

总之,如果您将JOOQ代码与Hibernate JPA混合,请确保hibernate.ddl-auto属性设置为无,否则可能会丢失数据库对象!