代码之家  ›  专栏  ›  技术社区  ›  Fil

使用Hibernate设置数据库不可知的默认列时间戳

  •  1
  • Fil  · 技术社区  · 16 年前

    我正在处理一个java项目,其中包含Hibernate(3.3.1)映射文件,这些文件对大多数域对象都有如下声明。

    <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();
    

    我尝试过扩展H2Dialect并注册函数getdate(),但在Hibernate创建表时似乎没有调用它。是否可以从特定的数据库引擎中抽象出默认时间戳的概念?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Pascal Thivent    16 年前

    你能试试下面的(不带)吗 generated

    <column  name="DATE_CREATED" sql-type="timestamp"  default="CURRENT_TIMESTAMP"/>
    
        2
  •  1
  •   matt b    16 年前

    你用过吗 a <timestamp> mapping <class> ?

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

    您可以指定Hibernate是否应该使用 database generated value 通过设置 generated="insert" generated="always" .