Я использую JPA 2.1 (Hibernate), Postgres 9.6, и мне нужно передать java.util.UUID в качестве параметра StoredProcedureQuery следующим образом:
StoredProcedureQuery proc = em.createStoredProcedureQuery(myProc)
.registerStoredProcedureParameter(0, UUID.class, ParameterMode.IN)
.registerStoredProcedureParameter(1, ...)
.setParameter(0, myUuid)
.setParameter(1, ...);
По умолчанию тип Java UUID интерпретируется как тип Postgres bytea , и я получаю что-то вроде:
ERROR: function my_function(bytea, ...) does not exist.
Конечно, он не существует, потому что моя функция:
my_function(UUID, ...)
Итак, есть ли способ явно определить, какой тип уровня базы данных должен использоваться для определенного параметра?
Может быть что-то вроде того, который мы используем в классах сущностей с аннотацией:
@Type(type="pg-uuid")
private UUID uuid;
Один очевидный обходной путь - передать значение как String , а затем привести его к UUID внутри функции, но ...