2015-01-22 2 views
1

Мой файл имеет поле -Как вставить текущую временную метку с отображением гибернации?

<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

Если сгенерировать DB схемы с 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); 

Таким образом, вы можете перезагрузить объект и принести также генерируются значения базы данных.

+0

'Если у вас есть существующая схема, вам нужно изменить ее, чтобы добавить значение DEFAULT для этого столбца метки времени. - Какая должна быть запись значения DEFAULT для текущего времени в этом случае? –

+0

DEFAULT current_timestamp, согласно [справочной документации] (http://www.postgresql.org/docs/8.2/static/sql-createtable.html) –