Подсказка you will need to rewrite or cast the expression
Добавил довольно-таки стандартный конвертер:
Есть поле в классе с аннотацией конвертера:
@Convert(converter = JpaConverterJson.class)
private JsonNode src;
В результате могу читать из бд этот объект, но не могу сохранять через стандартный метод JpaRepository - repository.save()
Потому что:
Caused by: org.postgresql.util.PSQLException: ERROR: column "src" is of type jsonb but expression is of type character varying
Подсказка: You will need to rewrite or cast the expression.
Что логично, метод конвертера String convertToDatabaseColumn, а нужно кастануть в jsonb
Пишу запрос на добавление данных из одной таблицы в другую.
Таблица tb2 содержит поля (id, type, domain, count)
Вываливается такая ошибка
Подскажите пожалуйста, в чем ошибка?
Ответы (3 шт):
Он тебе даже подчеркнул что t1.newUrl поверь правильно ли ты его указал
так написано же в ошибке что поле type в tb2 -> integer, а в таблице tb1 у него text, Вы пропустили поле id в tb2 в Insert`е, Вы вставляете type из tb1 в поле id tb2. Несоответствие типов.
Ошибка - типичная для лентяя. В таблице назначения не указаны поля, в которые выполняется вставка. Запрос следует изменить на
А зачем id добавлять? Он же автоинкремент
А сервер тупой. И делать он будет то, что ты сказал, а не то, что ты хотел. Не указаны поля? значит, вставлять будет все, ибо догадаться, какие поля не вставлять, он не может.
Как через preparedStatement используя enum добавить пользователя указав его пол получаю следующую ошибку
java.lang.IllegalStateException: org.postgresql.util.PSQLException: ERROR: column "gender" is of type gender but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
- Вопрос задан более двух лет назад
- 782 просмотра
Я не знаю java, но где вы вообще передаёте 4 параметр в запрос?
Ошибка говорит о том, что java по extended протоколу заявляет, что передаёт данные типа varchar, вместо типа gender. Да, для extended протокола это разные вещи и автоматически менять тип не будем.
Попробуйте так:
VALUES (. cast(? as gender))
Hint: You will need to rewrite or cast the expression.
тут даже дали подсказку, вам нужно привести значение к типу Enum.
В Spring эта "проблема" решается довольно простым образом. вы можете сразу принять параметр типа Enum. А в вашем случае, как я понял, хоть вы и вкладываете тип enum в шаблон, но получаете обычную строку (String).
Соответственно, вам нужно эту строку преобразовать к типу enum. Кстати, что-то в вашем сниппете я не вижу, где вы при помощи сеттера устанавливаете значение.
что-то типа такого должно сработать.
или же как вариант явно привести тип String к типу Enum
Хочу из базы test_2 через dblink обратиться к базе test_1 и получить оттуда данные. Ну хоть какие-то для начала.
Пишу запрос типа
select * from dblink (
'host=localhost user=postgres password=NeProstoParolAParolishe dbname=test_1',
'select * from v8users'
) as users (
rolesid numeric(10)
);
А он орет:
ERROR: remote query result rowtype does not match the specified FROM clause rowtype
SQL-состояние: 42804
Что ему не нравится? Вы запросили select *, затем сказали что record возвращаемые функцией соответствуют по структуре одному полю типа numeric.
Всё, в самом прямом смысле
query result rowtype does not match the specified FROM clause rowtype
pgadmin вовсе ни при чём, на запрос закономерно удивляется сам postgresql
Пишу так
Пробовал звездочку заменять списком полей - не помогло.
блин картинка чтоль изуродовалась..
Вот запрос:
ERROR: column "_code" is of type mvarchar but expression is of type character varying
LINE 1: INSERT INTO public._reference21 select * from dblink (
^
HINT: You will need to rewrite or cast the expression.
SQL-состояние: 42804
Символ: 40
потому что и не надо эту наскальную живопись сюда.
И собственно опять всё очевидно в тексте ошибки и что делать дальше дан сразу хинт.
_code удалённый хост заявляет некоторого кастомного типа mvarchar, вы заявляете что это varchar. Так нельзя.
Или приведите тип данных в запросе к varchar явным образом или добавьте на локальной базе такой же тип данных mvarchar и заявляйте что из dblink приходит именно он.
Читайте также: