Настраиваю Mybathis 3 в связке с PostgreSQL при попытке совершить insert в базу обнаружилась неприятная особенность: вместо null в запросе были сформированы пустые строки - ' ', из-за чего собственно запрос валится.
### The error may involve process_message.insert-Inline
### The error occurred while setting parameters
### SQL:
insert into UTP_PROCESS_MESSAGE (
SYSTEM_ID,
PROCESS_MESSAGE_DATA,
PROCESS_ID,
OPERATION_TYPE_ID
) VALUES **(
,
,
,
)**
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near ","
Позиция: 167
Я ожидал, что запрос будет сформирован иначе:
insert into UTP_PROCESS_MESSAGE (
SYSTEM_ID,
PROCESS_MESSAGE_DATA,
PROCESS_ID,
OPERATION_TYPE_ID
) VALUES **(
null,
null,
null,
null
)**
Если передать конкретные значения, то все работает верно.
Параметры задаю так:
HashMap <String, Long> params = new HashMap<String, Long>();
params.put("systemId", null);
params.put("messageData", null);
params.put("processId", null);
params.put("operationTypeId", null);
session.insert("process_message.insert", params);
SQL запрос выглядит так:
<insert id="insert" parameterType="Map">
insert into UTP_PROCESS_MESSAGE (
SYSTEM_ID,
PROCESS_MESSAGE_DATA,
PROCESS_ID,
OPERATION_TYPE_ID
) VALUES (
${systemId,javaType=Long,jdbcType=BIGINT},
${messageData,javaType=String,jdbcType=VARCHAR},
${processId,javaType=Long,jdbcType=BIGINT},
${operationTypeId,javaType=Long,jdbcType=BIGINT}
)
</insert>
Исчерпал уже все предположения. В чем может быть дело?
Ну вот, стоило только опубликовать вопрос, как я сам заметил в чем дело... Надеюсь, это поможет другим. Проблема в невнимательности: символ $ нужно заменить на #, вот так:
<insert id="insert" parameterType="Map">
insert into UTP_PROCESS_MESSAGE (
SYSTEM_ID,
PROCESS_MESSAGE_DATA,
PROCESS_ID,
OPERATION_TYPE_ID
) VALUES (
#{systemId,javaType=Long,jdbcType=BIGINT},
#{messageData,javaType=String,jdbcType=VARCHAR},
#{processId,javaType=Long,jdbcType=BIGINT},
#{operationTypeId,javaType=Long,jdbcType=BIGINT}
)
</insert>
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости