Hibernate с SQLite Невозможно запустить приложение второй раз после создания БД - PullRequest
0 голосов
/ 26 октября 2019

Я занимаюсь разработкой приложения JavaFX с использованием Spring boot, JPA, Hibernate & SQLite Database с системой Gradle Build в IntelliJ. Все работает хорошо в первый раз, когда нет файла БД SQLite. Он создаст этот файл и создаст все таблицы с правильными определениями, и я могу выполнять все операции с БД с помощью моего приложения.

Но когда я запускаю его во второй раз, он не запускается и выдает ошибку, которую я не могу решить. Потому что это первый раз, когда я делаю это.

ошибка ниже.

Причина: org.hibernate.exception.GenericJDBCException: Ошибка при доступе к метаданным таблиц в org.hibernate.exception.internal.StandardSQLExceptionConverter.convert (StandardSQLExceptionConverter.java:iber) в org.h. .engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:113) в org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert (SqlExceptionHelper.java:99)
... 35 больше

Вызвано: org.sqlite.SQLiteException: [SQLITE_ERROR] Ошибка SQL или отсутствует база данных (слишком много терминов в составном SELECT) в org.sqlite.core.DB.newSQLException (DB.java:941) в org.sqlite.core.DB.newSQLException (DB.java:953) в org.sqlite.core.DB.throwex (DB.java:918) в org.sqlite.core.NativeDB.prepare_utf8 (собственный метод) в org.sqlite.core.NativeDB.prepare (NativeDB.java:134) в org.sqlite.core.DB.prepare (DB.java:257) ... еще 25



Теперь у меня нетИдея о

org.hibernate.exception.GenericJDBCException: Ошибка доступаметаданные sing таблиц

и

org.sqlite.SQLiteException: [SQLITE_ERROR] Ошибка SQL или отсутствует база данных (слишком много терминов в составном SELECT)


Мой файл application.properties как показано ниже

##Database Properties
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:MYDATABASE.db
spring.datasource.username=root
spring.datasource.password=


#Hibernate Properties

#The SQL dialect makes hibernate generate better SQL for chosen database
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLiteDialect


#Hibernate DDL auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=update
spring.main.web-environment=false
spring.main.web-application-type=none

##Uncomment below 2 lines to enable hibernate JDBC queries/logs
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

Кто-нибудь прошел через это? пожалуйста, помогите.

1 Ответ

1 голос
/ 27 октября 2019

Я подозреваю, что проблема может быть связана с настройкой в ​​этой строке:

spring.jpa.hibernate.ddl-auto=update

Насколько я понимаю, hibernate попытается обновить существующую схему при запуске. Чтобы это произошло, Hibernate должен разрешить структуру существующих таблиц, поэтому ему нужно получить метаданные. Глядя на полученное исключение, я полагаю, что он не может получить метаданные с помощью драйвера SQLLite JDBC. Это также объясняет, почему вы не получили никаких ошибок при первом запуске приложения. В этом случае Hibernate создает схему с нуля, поэтому ошибки не возникает.

Я предлагаю вам использовать create-drop на этапе разработки и none при переходе в производство.

Вы можете обратиться к ответу на другой вопрос, который объясняет настройки более подробно: Как свойство spring.jpa.hibernate.ddl-auto точно работает в Spring?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...