Весенний импорт SQL с Hibernate - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу использовать Hibernate при запуске исходного файла sql. Проблема, с которой я столкнулся в настоящее время, заключается в том, что я получаю следующее исключение: я хочу, чтобы HIBERNATE вставлял идентификатор вместо базы данных!

Caused by: java.sql.SQLException: Field 'id' doesn't have a default value

Мои application.properties выглядят так:

spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
#Data Source Settings
spring.datasource.url=jdbc:mariadb://localhost:3306/kotlin
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.dbcp2.test-while-idle=true
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.continue-on-error=false
#Add Initial Date for Testing
spring.datasource.initialization-mode=always
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.hbm2ddl.import_files=data.sql

Моя пользовательская модель содержит:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
var id: Long = 0

Мой запуск sql скрипт:

INSERT INTO user (first_name, last_name, pass_word, user_name, version, email) VALUES ('deepak', 'sp', '$2a$10$2nU5xMCyzPMeNiGQsrjzQeWNcHf9NjtGzVFgy6kVRcZlLh/ABTgZW', 'spdeepak', 1, "example@example.com");

Кажется, что он хочет напрямую выполнить sql (сгенерированный идентификатор в Hibernate не используется) вместо создания объекта User и последующей вставки данных.

Я также получаю эту ошибку при работе со значениями по умолчанию (он говорит, что в базе данных нет значения по умолчанию). Поэтому, пожалуйста, не просто отвечайте «Использовать GenerationType.IDENTITY)

1 Ответ

1 голос
/ 29 апреля 2020

Попробуйте это:

INSERT INTO user (id, first_name, last_name, pass_word, user_name, version, email) 
VALUES 
(null, 'deepak', 'sp', '$2a$10$2nU5xMCyzPMeNiGQsrjzQeWNcHf9NjtGzVFgy6kVRcZlLh/ABTgZW', 'spdeepak', 1, "example@example.com");

В вашем операторе вставки отсутствует столбец идентификатора, но он обязателен. Если вы укажете нулевое значение, то db назначит его значение автоматически с помощью функции autoincrement.

О создании идентификатора с помощью hibernate для ручных сценариев - это невозможно. Ручные сценарии выполняются как есть непосредственно в базе данных без какой-либо основы. Это чистый jdb c оператор sql выполнение скрипта.

Я вижу, что вы используете репозитории jpa в соответствии с вашими файлами свойств. Если вы хотите, чтобы с помощью hibernate была произведена генерация идентификатора, вам следует создать своего пользователя через репозиторий jpa.

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