Передайте EnumType в функцию Postgres - PullRequest
0 голосов
/ 22 сентября 2018

Во-первых .... У меня есть функция postgres:

CREATE OR REPLACE FUNCTION auth.MyFunction (
  platform autorizacion.e_tipo_plataforma, //Enum Type
  pAppId varchar,
  pVersion integer
)

, когда e_tipo_plataforma равно:

CREATE TYPE autorizacion.e_tipo_plataforma AS ENUM (
'Web', 'Escritorio', 'Movil', 'Servicio');

Как вы можете видеть параметр для вызова функцииEnum Type (e_tipo_plataforma)

Я пытаюсь отправить этот EnumType на Postgres CallableStatement:

String query="{call auth.MyFunction(?,?,?)}";
CallableStatement ps=conn.prepareCall(funcionLlamar);

1-е намерение: ps.setObject("p_tipo_plataforma", usuario.tipoPlataforma); где

usuario.tipoPlataforma enter image description here

Ошибка:

java.sql.SQLFeatureNotSupportedException: Метод org.postgresql.jdbc.PgCallableStatement.setObject (String, Object) еще не реализовано.

2-е намерение: ps.setObject(1, usuario.tipoPlataforma.name());

ОШИБКА:

функция auth.MyFunction (изменение символа, изменение символа, целое число) не существует

ОБНОВЛЕНИЕ: 3-е намерение: ps.setObject(1, usuario.tipoPlataforma);

ОШИБКА:

Не могу вывести SQLтип для использования в качестве экземпляра enumerator.TipoPlataforma.Используйте setObject () с явным значением Types, чтобы указать используемый тип.

Вопрос в том, как можно отправить в качестве параметра EnumType, если функция в postgres принимает только этот тип?

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете передавать значения перечисления в виде строк (при условии, что имена ваших перечислений Java и PostgreSQL, конечно же, совпадают!) И оставить тяжелую работу по преобразованию строки в перечисление в базу данных:

ps.setString("p_tipo_plataforma", usuario.tipoPlataforma.name());
...