我正在研究一個充滿Hibernate(3.3.1)映射文件的Java項目,這些文件對於大多數域對象具有以下類型的聲明。使用休眠設置數據庫不可知的默認列時間戳
<property name="dateCreated" generated="insert">
<column name="date_created" default="getdate()" />
</property>
這裏的問題是,GETDATE()是MSSQL特定的功能,當我使用像H2測試項目的小節,H2的尖叫聲是
getdate()
不一個公認的功能。它自己的時間戳功能
current_timestamp().
我希望能夠保持與H2的工作進行測試,並想知道是否有告訴Hibernate的「使用該數據庫自身的機制來獲取當前時間戳的方式」。隨着H2,我想出了以下解決方案。
CREATE ALIAS getdate AS $$ java.util.Date now() { return new java.util.Date(); } $$;
CALL getdate();
它的工作原理,但顯然H2具體。
我試過擴展H2Dialect並註冊了函數getdate(),但是這似乎並沒有在Hibernate創建表時調用。是否有可能將默認時間戳的概念從特定數據庫引擎中抽象出來?
我可以。我的觀點並不是我想完全轉向H2,而是我正在測試一小部分代碼,我不需要使用MSSQL,而在使用像H2這樣的內存數據庫的情況下,測試更快,更愉快。在每個數據庫管理系統中爲時間戳功能命名不同,感覺很愚蠢。 – Fil 2010-06-08 20:43:15
HSQLDB與H2非常相似(從未使用H2,因此我不清楚功能的細節)並支持'CURRENT_TIMESTAMP'。我一直使用HSQL進行內存單元測試。 http://hsqldb.org/doc/2.0/guide/sqlgeneral-chapt.html#N10544 – 2010-06-08 20:54:06
@unsquared:我不是100%確定,但我認爲上述建議是可移植的。 – 2010-06-08 21:00:07