如何使用hibernate映射插入当前时间戳?

时间:2015-01-22 08:04:25

标签: java database hibernate orm hibernate-mapping

我的档案有字段 -

<property name="createdTs" type="timestamp">
    <column name="created_ts" length="29" />
</property>

当我用 -

保存表格时
public void persist(DrRequest transientInstance) {
        log.debug("persisting DrRequest instance");

        try {

            Transaction trans=sessionFactory.getCurrentSession().beginTransaction();
            sessionFactory.getCurrentSession().persist(transientInstance);
            trans.commit();
            log.debug("persist successful");
        } catch (RuntimeException re) {
            log.error("persist failed", re);
            throw re;
        }

它不会将当前时间的created_ts字段保存在postgresql数据库表中。

created_ts的类型为timestamp without time zone

1 个答案:

答案 0 :(得分:1)

如果使用hibernate.hbm2ddl.auto生成数据库模式,则需要指示Hibernate包含默认的“CURRENT_TIMESTAMP”指令:

<column  name="created_ts" length="29" sql-type="timestamp without time zone" default="CURRENT_TIMESTAMP"/>

如果您有现有架构,则需要更改它以为此时间戳列添加DEFAULT值。

Hibernate不会知道数据库生成的值,所以你需要刷新你的实体,在你持久化并刷新Hibernate会话之后:

session.flush();
session.refresh(transientInstance);

这样您就可以重新加载实体并获取数据库生成的值。