Я работаю над 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 создает таблицы. Можно ли абстрагироваться от идеи временной метки по умолчанию от конкретного движка базы данных?