2017-09-14 62 views
2

我有一個名爲createTimestamp的字段。這是數據庫在插入時創建的。吸氣看起來是這樣的:JPA Entity CreateTimestamp在爲空後爲空

@Column(name = "create_timestamp", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false) 
public ZonedDateTime getCreateTimestamp() { 
    return createTimestamp; 
} 

然而,當我的服務調用DAO(春季庫)創建實體的創建時間戳爲空。

吾道方法來創建:

@Override 
public int insert(AntennaSpec antennaSpec) { 
    super.save(antennaSpec); 
    logger.info("Antenna Spec " + antennaSpec.getAntennaCode() + " created"); 
    return antennaSpec.getAntennaSpecId(); 
} 

我的REST資源類調用該服務通過調用Create方法創建的實體。該方法返回新創建的實體的ID。在資源中,然後我調用我的服務來返回傳遞該id的實體,但create timestamp爲null。我已經做了什麼來完成填充是在我的資源,我已經分離了實體,然後再次獲取實體。這有效,但我不喜歡將detach暴露給我的服務或資源類。

任何幫助,將不勝感激。

+0

你可以發佈你的表DDL嗎?當hibernate爲你生成數據庫時,會使用'columnDefinition',如果你使用liquibase,例如DDL一定不需要匹配。 – Andreas

+0

道歉。我忘了提及hibernate沒有設置爲我生成數據庫。只是爲了驗證現有的數據庫適用於我的實體。 –

+0

這是一個想法......你看看INSERT語句的SQL,併爲人們提供表格的DDL。然後調試是可能的... – DN1

回答

0

這是另一種方式的創建時間戳春:

@CreationTimestamp 
@Column(name = "create_timestamp") 
private Date createTimestamp; 
+0

而不是日期我使用Java 8的'ZonedDateTime'它出現它不工作'@ CreationTimestamp' –

0

看起來你可能想註釋@Temporal(TemporalType.TIMESTAMP)添加到您的列中給出here答案進行討論。

查看here瞭解有關持久性,保存,更新,合併和saveOrUpdate對不同對象狀態執行不同操作的更多信息。

+0

不幸的是我沒有使用'java.util.Date'而是'ZonedDateTime'。 –

0

columnDefinition只有當你讓hibernate生成數據庫時纔有效果;否則它只是被忽略。只需通過數據庫遷移工具將您的列更改爲所需的狀態即可。

columnDefinition

(可選) 列生成DDL時使用的SQL片段。 JPA JavaDoc