Я использую Hibernate Framework на моей стороне сервера с Postgres в качестве серверной части. Я использую тип enum users.user_role
(здесь пользователи - это схемы).
Определение для ENUM
create type users.user_role as ENUM ('Agent', 'Customer');
Теперь я подключаюсь к своей базе данных, используя "org.postgresql.Driver". Для этого я использую postgressql-9.3-1101-jdbc4.jar.
Когда я пытаюсь вставить значение, используя Подготовленное заявление, оно работает нормально. Базовый код, который работает нормально, приведен ниже.
String sqlQuery = "insert into users.user (user_id, created, last_modified, client_id, email, active, data, user_role_type) values (?, ?, ?, ?, ?, ?, ?, ?)";
try {
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/kc_abhi","postgres","root");
PreparedStatement preparedStatement = connection.prepareStatement(sqlQuery);
preparedStatement.setObject(1, UUID.fromString("d70328f0-7301-4ce7-9c3d-64938f9c6c7d"));
preparedStatement.setObject(2, new Timestamp(System.currentTimeMillis()));
preparedStatement.setObject(3, new Timestamp(System.currentTimeMillis()));
preparedStatement.setObject(4, UUID.fromString("4753fe2b-f0a6-4ee9-8cc9-8bb20b60ef73"));
preparedStatement.setObject(5, "ab@everestek.com");
preparedStatement.setObject(6, true);
PGobject pGobject = new PGobject();
pGobject.setType("json");
pGobject.setValue("{\"data\":\"data\"}");
preparedStatement.setObject(7, pGobject);
PGobject pGobject1 = new PGobject();
pGobject1.setType("user_role");
pGobject1.setValue("Customer");
preparedStatement.setObject(8, pGobject1);
int i = preparedStatement.executeUpdate();
System.out.println("i = " + i);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
Выпуск :
Когда я пытаюсь использовать org.hibernate.SQLQuery для той же цели, выдается ошибка ENUM.
Ошибка : ОШИБКА: столбец "user_role_type" имеет тип users.user_role, но выражение имеет тип bytea
Запрос
SQLQuery sqlQuery = currentSession().createSQLQuery("insert into users.user (user_id, created, last_modified, client_id, email, active, data, user_role_type, user_role_data) values (:userId, :created, :lastModified, :clientId, :email, :active, :data, :userRoleType, :userRoleData));
Настройка параметров, таких как
PGobject pGobject1 = new PGobject();
pGobject1.setType("user_role");
pGobject1.setValue("Customer");
sqlQuery.setParameter("user_role_type", "Customer");
Теперь для json type возникла та же проблема. Я пытался отправить тип String для JSON в PLSQL, но он показывает
Ошибка : ОШИБКА: столбец «данные» имеет тип json, но выражение имеет тип String
Настройка параметров, таких как
PGobject pGobject1 = new PGobject();
pGobject1.setType("json");
pGobject1.setValue(data); //here data is of type string
sqlQuery.setParameter("data", data);