1

我正在研究一个充满 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 创建表时似乎没有调用它。是否可以从特定的数据库引擎中抽象出默认时间戳的概念?

4

2 回答 2

2

您可以尝试以下操作(generated因为您的数据库没有生成值):

<column  name="DATE_CREATED" sql-type="timestamp"  default="CURRENT_TIMESTAMP"/>
于 2010-06-08T20:28:22.300 回答
1

您是否尝试过在您<timestamp>内部使用映射<class>

文档不是很清楚,但听起来这应该会导致映射一个值为时间戳的列。

您可以通过设置或来指定 Hibernate 是否应该使用数据库生成的值generated="insert"generated="always"

于 2010-06-08T18:51:13.490 回答