2016-12-01 91 views
-1

我們使用Hibernate。如何確保日期從Java存儲到SQLServer以毫秒分辨率?

在Java中,對象是java.util.Date。 在SQLServer中,該列是datetime2(7)。

當我們將此對象存儲在SQLServer數據庫中並稍後檢索它時,此對象的毫秒分辨率的值不會相同。

例如,從Java:Dec 01 2016 15:50.453 當它從數據庫返回:Dec 01 2016 15:50.455

所以,我們所遇到的情況,其中的equals()方法,以SQLServer的這一設計方面的失敗所致。

Hibernate方言中是否缺少某些東西,例如:註冊列類型。

或者我應該定義一些轉換,以便獲得我保存的正確值。

回答

0

這是一個糟糕的設計。你不能保證任何這樣的事情。

爲什麼不在數據庫服務器上調用CURRENT_TIMESTAMP並保存它,而不是在Java端創建一個值並將它傳遞給SQL Server?

從你的描述中我不清楚哪裏的時間戳居住在Java端。它是否在Java對象本身?這是你插入數據庫的價值嗎?你說當你將它保存在SQL Server中時,來自對象的值是關閉兩個2毫秒?

我會建議你的設計會更好,不依賴於時間戳精確到毫秒。

我會指出,您無論如何都不希望更改SQL Server或Java的任何設計方面。

如果您可以發佈更多要求來闡明您爲何依賴時間戳,那麼也許會更容易回答。

+0

沒有。當前時間戳不是唯一的用例。在應用程序運行時,我們可能會將日期保存在某個對象中,並在稍後的時間點保存在數據庫中。 –

+0

您比較時間戳時遇到問題。但我不能告訴沒有更多的細節我推薦替代方案。通常我依賴於將所有對象綁定到特定會話的GUID。我可以創建並可靠地檢索所有關聯的數據。 – duffymo

相關問題