Установка независимой от базы данных временной метки столбца по умолчанию с помощью Hibernate - PullRequest
1 голос
/ 08 июня 2010

Я работаю над 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();

Это работает, но, очевидно, специфично для H2.

Я пытался расширить H2Dialect и зарегистрировать функцию getdate (), но это не вызывается, когда Hibernateсоздание таблиц.Можно ли абстрагировать идею временной метки по умолчанию от конкретного механизма базы данных?

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Не могли бы вы попробовать следующее (без generated, так как ваша база данных не генерирует значение):

<column  name="DATE_CREATED" sql-type="timestamp"  default="CURRENT_TIMESTAMP"/>
1 голос
/ 08 июня 2010

Вы пробовали использовать a <timestamp> mapping внутри вашего <class>?

Документы не очень четкие, но, похоже, это должно привести к отображению столбца, значение которого является меткой времени.

Вы можете указать, должен ли Hibernate использовать сгенерированное базой данных значение , установив generated="insert" или generated="always".

...