Код ошибки: 1364. Поле «userid» не имеет значения по умолчанию

Это ошибка:

java.sql.SQLException: поле «userid» не имеет значения по умолчанию в com.mysql.cj.jdbc.Exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0. банка: 8.3.0]

Это мой класс Entity:

@Entity
@Table(name = "users")
public class Users {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int userId;

  
}

Стол:

CREATE TABLE `users` (
  `user_id` int NOT NULL AUTO_INCREMENT,
  `email` varchar(255) DEFAULT NULL,
  `is_active` bit(1) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `registration_date` datetime(6) DEFAULT NULL,
  `user_type_id` int DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `UK_6dotkott2kjsp8vw4d0m25fb7` (`email`),
  KEY `FK5snet2ikvi03wd4rabd40ckdl` (`user_type_id`),
  CONSTRAINT `FK5snet2ikvi03wd4rabd40ckdl` FOREIGN KEY (`user_type_id`) REFERENCES `users_type` (`user_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

когда я делаю вставку, я получаю эту ошибку:

Код ошибки: 1364. Поле «userid» не имеет значения по умолчанию.

Вероятно, нужно сделать userId типом Integer (вместо примитива int), чтобы значение изначально могло быть нулевым.

Andrew S 20.05.2024 20:20

В вашей таблице нет столбца userid. Если ошибка «не имеет значения по умолчанию», а не «неизвестный столбец», значит, вы вставляете данные не в таблицу users.

Akina 20.05.2024 21:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Причин этой ошибки может быть несколько. Давайте посмотрим поближе — ошибка исходит из базы данных и касается поля userid.

  • В таблице у вас есть user_id, поэтому это не таблица, в которую вы вставляете запись. Возможно, Hibernate создает еще одну таблицу, и вы ее пропустите.
  • В сущности имя поля — userId. То, как это имя в верблюжьем регистре преобразуется в имя поля в базе данных, зависит от настроек и версии Hibernate. Обычно поля базы данных создаются в змеином случае, но вы должны об этом знать.
  • Установите hibernate.show_sql: true в application.yml или hybernate.show_sql=true, если у вас есть application.properties, и посмотрите, что он напечатает.
Ответ принят как подходящий

При вводе имен наблюдается несоответствие. в классе сущности «Пользователи» это поле называется userId, но в таблице MySQL столбец называется user_id. Чтобы решить эту проблему, необходимо убедиться, что имена, используемые в классе сущностей Java, соответствуют именам в схеме таблицы базы данных. Вы можете исправить это, изменив свой класс сущности, включив в него правильное имя столбца, используя аннотацию @Column:

@Entity
@Table(name = "users")
public class Users {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "user_id") // Make sure this matches the column name in your table
 private int userId;
}

Другие вопросы по теме