Спящий и MySql - PullRequest
       4

Спящий и MySql

0 голосов
/ 09 апреля 2020

Я пытаюсь изучить Hibernate, поэтому я создал очень простой Java проект с одной таблицей. Я установил первичный ключ для автоматической генерации идентификатора с использованием стратегии = GenerationType.Auto. Как только таблица будет создана с помощью hibernate, я затем go в MySql верстак и попытаюсь заполнить таблицу. Я не предоставляю идентификатор, поскольку предполагаю, что он будет сгенерирован автоматически.

В этот момент я получаю сообщение об ошибке: поле не имеет значения по умолчанию.

Итак, я настроил значение по умолчанию, используя аннотации Hibernate, а затем снова запустите оператор SQL Insert, и на этот раз он сообщит мне: Дублирующая запись для первичного ключа

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

Я не понимаю, почему он не генерирует идентификатор автоматически.

То, что я пробовал: 1. Установить Global sql_mode = "" 2. Применить значение по умолчанию, используя Спящие аннотации.

package com.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class ERS_User_Role implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(columnDefinition = "int default 0")
    private int user_role_id;


    private String user_role_description;

    public ERS_User_Role(int user_role_id, String user_role_description) {
        super();
        this.user_role_id = user_role_id;
        this.user_role_description = user_role_description;
    }

    public int getUser_role_id() {
        return user_role_id;
    }

    public void setUser_role_id(int user_role_id) {
        this.user_role_id = user_role_id;
    }

    public String getUser_role_description() {
        return user_role_description;
    }

    public void setUser_role_description(String user_role_description) {
        this.user_role_description = user_role_description;
    }

    @Override
    public String toString() {
        return "ERS_User_Role [user_role_id=" + user_role_id + ", user_role_description=" + user_role_description + "]";
    }

}



DELETE FROM ERS_USER_ROLE;

commit;

INSERT INTO ERS_USER_ROLE (USER_ROLE_DESCRIPTION) VALUES ('Employee');
INSERT INTO ERS_USER_ROLE (USER_ROLE_DESCRIPTION) VALUES ('Manager');
commit;

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Я изменил стратегию на GenerationType.Identity, и теперь она работает как положено.

0 голосов
/ 09 апреля 2020

Глядя на ваш код и эти сообщения на форуме Hibernate , кажется, что вам нужно следовать:

@Column(name="user_role_id", nullable = false, columnDefinition="INT NOT NULL")
private int user_role_id;

И установите значение по умолчанию на ноль, если хотите, но на твоем месте я не буду этого делать. Это означает, что вам нужно предоставить себе идентификатор, чтобы выявить ошибку дублирующихся идентификаторов. Если вы хотите создать уникальные идентификаторы, вам не нужно устанавливать значение по умолчанию.

...