Пример звонка:
Код: Выделить всё
convert_tz(entity.timestamp, '+00:00', '-04:00', -240, 'UTC', 'America/Anguilla'Данный пользовательский диалект может затем возьмите его и преобразуйте во что-то удобное для текущей БД. См. несколько примеров ниже, чтобы понять, насколько гибким нам это нужно. Все потенциально необходимые данные сохраняются при первоначальном вызове и соответствующим образом реорганизуются.
MariaDB: Convert_tz(entity.timestamp, '+00:00', '-04:00' )
PostgreSQL:entity.timestamp В часовом поясе «UTC» В часовом поясе «Америка/Ангилья»
Способ определения этой функции на диалекте в Hibernate 5 больше не поддерживается, он не компилируется. (похоже, что ни одна из функций больше не существует)
Вот как мы успешно работали в Hibernate 5, который больше не компилируется с Hibernate 6:
< pre class="lang-java Prettyprint-override">
Код: Выделить всё
public class CustomMariaDBDialect5 extends MariaDBDialect{
public CustomMariaDBDialect5 () {
registerColumnType( Types.TIMESTAMP, "datetime" );
super.registerFunction("convert_tz", new SQLFunctionTemplate(DateType.INSTANCE, "convert_tz(?1, ?2, ?3) "));
}
Код: Выделить всё
public class CustomMariaDBDialect6 extends MariaDBDialect {
public CustomMariaDBDialect6() {
super();
}
@Override
public void contributeFunctions(FunctionContributions functionContributions) {
super.contributeFunctions(functionContributions);
functionContributions.getFunctionRegistry().registerPattern("convert_tz",
"convert_tz(?1, ?2, ?3) ", functionContributions.getTypeConfiguration().getBasicTypeRegistry().resolve(StandardBasicTypes.DATE));
}
@Override
protected String columnType(int sqlTypeCode) {
if(sqlTypeCode == Types.TIMESTAMP){
return "datetime";
}else{
return super.columnType(sqlTypeCode);
}
}
}
Код: Выделить всё
org.hibernate.query.sqm.produce.function.FunctionArgumentException: Function convert_tz() has 3 parameters, but 6 arguments given
Подробнее здесь: https://stackoverflow.com/questions/785 ... ibernate-6
Мобильная версия