#java #hibernate #h2
#java #спящий режим #h2
Вопрос:
Я пытался использовать базу данных h2 в режиме SQL. Я смог создать схему со всеми прописными буквами и создать под ней несколько таблиц. Однако мое приложение, работающее в режиме гибернации, похоже, не работает, если я не совпадаю с именем схемы во всех прописных буквах. Я думал, что h2 можно настроить, используя IGNROECASE=TRUE в строке подключения JDBC. Я что-то упустил?
Комментарии:
1. Это что, прообраз? Должно быть IGNORECASE=TRUE
2. поможет ли это: github.com/dineshbhagat/spring-boot-web-jpa/blob /…
Ответ №1:
IGNORECASE
настройка не связана с именами объектов базы данных, она странным образом изменяет сопоставление CHARACTER VARYING
столбцов без учета регистра.
Идентификаторы без кавычек в H2 с настройками по умолчанию и во многих других СУБД преобразуются в верхний регистр, как того требует стандарт SQL.
Если вы используете режимы совместимости с MySQL или PostgreSQL, вам обычно необходимо указать DATABASE_TO_LOWER=TRUE
, потому что эти СУБД вместо этого преобразуют идентификаторы без кавычек в нижний регистр. Вы можете найти более подробную информацию об этих режимах совместимости там: https://h2database.com/html/features.html#compatibility
В некоторых случаях вам также может понадобиться CASE_INSENSITIVE_IDENTIFIERS=TRUE
.
Оба эти параметра доступны с версии H2 1.4.198. В более старых версиях вы можете использовать DATABASE_TO_UPPER=FALSE
вместо этого; но не используйте этот параметр в более новых версиях.
Комментарии:
1. Мой URL-адрес уже обладает этими свойствами. Я использую 1.4.200. Это правильно? jdbc:h2:file:../../../test-classes/test4;MODE=MSSQLServer;database_to_upper=false;IGNORECASE=true;AUTO_SERVER=TRUE;
2. Вам необходимо удалить
DATBASE_TO_UPPER
параметр с его значением.3. Я изменился на следующее, но все еще получаю исключение jdbc:h2:file:${project.build.directory}/test-classes/test4;MODE=MSSQLServer;IGNORECASE=true;AUTO_SERVER= TRUE org.h2.jdbc.JdbcSQLSyntaxErrorException: схема «my_schema» не найдена;
4. Если вы уверены, что эта схема существует, но с другим регистром символов в ее имени, вы можете добавить
CASE_INSENSITIVE_IDENTIFIERS=TRUE
настройку. Но это означает некоторую проблему в вашем приложении.5. Удаленный DATABASE_TO_UPPER и добавленный CASE_INSENSITIVE_IDENTIFIERS =TRUE решили проблему. Спасибо всем.