Я применил следующий обходной путь. Я добавил требуемую для меня функцию в контекст оценки Spring следующим образом:
@Component
public class CustomEvaluationContextExtension extends EvaluationContextExtensionSupport {
private static final Map<String, Function> functions = new HashMap<>();
static {
functions.put("ldt2timestamp", createLdt2timestampFunc());
}
private static Function createLdt2timestampFunc() {
Method convertToDatabaseColumn =
ReflectionUtils.findMethod(LocalDateTimeAttributeConverter.class,
"convertToDatabaseColumn", LocalDateTime.class);
return new Function(convertToDatabaseColumn,
LocalDateTimeAttributeConverter.INSTANCE);
}
@Override
public Map<String, Function> getFunctions() {
return functions;
}
@Override
public String getExtensionId() {
return "custom";
}
}
После того, как я позвоню ldt2timestamp следующим образом в моих запросах:
@Transactional
@Query(nativeQuery = true, value =
"INSERT INTO my_entity (update_date_time) " +
"VALUES (:#{#root.ldt2timestamp(#e.getUpdateDateTime())}) " +
"ON CONFLICT (hash) DO NOTHING RETURNING *")
Long insert(MyEntity e);
Это работает для меня. Надеюсь, это кому-нибудь поможет.