2011-06-01 105 views
5

我節省了實體在休眠模式,創建日期 Hibernate的日期不保存

 @Id 
    @Column(name = "dtcreation") 
    @Type(type="timestamp") 
    private Date creation;
,我把一個新的日期在這一領域的毫秒:
 entity.setCreation(new Date()); 
    entityDao.persist(entity);
但是當它被保存在數據庫的時間不要不包含毫秒,但如果我嘗試用查詢更新它的毫秒數值,則將其設置爲0 ...有人可以幫助我嗎?

的persist方法後,我有01/06/2011 15的紀錄:00:00.0 ,但如果我做了UPDATE我可以改變毫秒,所以數據庫支持的話.. 數據庫的Informix

+0

java.util.Date相當古老而且很可怕。如果可以,請調查Joda時間。它與Hibernate集成。 http://joda-time.sourceforge.net/contrib/hibernate/userguide.html – artbristol 2011-06-01 12:26:41

+2

我想你的主要問題是你保存到數據庫列(不是日期impl,我從來沒有問題與java.util。日期) – bestsss 2011-06-01 12:28:21

+1

我懷疑這是一個休眠問題。底層數據庫是什麼? – 2011-06-01 12:29:14

回答

0

沒有你的代碼來測試我很難明確地回答,但在看看Javadoc的java.sql.Timestamp時,看起來你正在混合類型和註釋該字段作爲時間戳。將Java類型從Date更改爲Timestamp並查看是否可以解決您的問題。

8

這與java.util.Date所述記錄的行爲和java.sql.Timestamp

java.util.Date存儲至所述第二相一致,並且是的java.sql.Timestamp一個瘦包裝容納SQL時間戳值的納秒值。如果您閱讀時間戳javadoc上的註釋,它清楚地說明了這種差異。

如果你不想失去你的第二部分,並不想調查替代日期庫(例如上述喬達時間),你需要使該字段爲java.sql.Timestamp,並使用構造初始值的當前日期的毫秒值

java.util.Date date = new java.util.Date(); 
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime()); 
entity.setCreation(timestamp);