2015-12-08 91 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屬性設置爲無,否則可能會丟失數據庫對象!