2016-10-11 4 views
1

Внутри Mybatis картографа файла для <insert> заявления, когда добавить свойство useGeneratedKeys="true", получит сообщение об ошибке:Mybatis - Ошибка при указать "useGeneratedKeys" для HSQL

org.hsqldb.HsqlException: user lacks privilege or object not found: id

Конфигурация работает Postgresql и Mysql, но не Hsql.

идентификатор столбца в hsql определяется как:

id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY

Когда удалить свойство useGeneratedKeys="true", это работает.

Но почему это произошло?

+0

Я использую его, и он работает. Я использую его с совместимостью Postgres (используя BigSerial), но он переводится в эквивалент Hsql, поэтому это должно работать. (http://hsqldb.org/doc/guide/compatibility-chapt.html#coc_compatibility_postgres) – Pau

+0

@Pau Я тестировал его, он не работает с 'Hsql', может быть, в Hsql, реализация' IDENTITY' является специальной , и вызывают проблему. –

+1

@Pau Проблема вызвана особой чувствительностью к регистру в именах в 'hsqldb', см. Ответ и комментарии @ fredt. –

ответ

3

Это символ символа «id». Попробуйте определение столбца в базе данных

"id" BIGINT GENERATED ... 

или в качестве альтернативы, определить столбец как ID (верхний регистр) в MyBatis.

+0

В ответах на вопросы четко сказано, что 'id' уже является строчным. –

+0

Ваш SQL преобразован в верхний регистр HSQLDB. Вам нужно использовать двойные кавычки вокруг 'id', чтобы заставить строчные буквы. – fredt

+0

Добавление двойных кавычек по имени столбца при создании таблицы не решит проблему, но использовать верхний регистр для свойства 'keyColumn'' '' решил проблему, например 'keyColumn =" ID "'. –