Java SQLException:字段不为';没有默认值

Java SQLException:字段不为';没有默认值,java,mysql,spring-boot,save,auto-increment,Java,Mysql,Spring Boot,Save,Auto Increment,我有一个具有以下属性的技能实体 @Id @GeneratedValue (strategy=GenerationType.IDENTITY) @Column(name = "idskill", nullable = false) private int idskill; private String skillName; 我希望在创建新条目时为Id分配一个随机值,最好是自动递增的。 然后,我尝试将一个新条目保存到方法中的mysql数据库中 Optional&

我有一个具有以下属性的技能实体

@Id
    @GeneratedValue (strategy=GenerationType.IDENTITY)
    @Column(name = "idskill", nullable = false) 
    private int idskill;

    private String skillName;
我希望在创建新条目时为Id分配一个随机值,最好是自动递增的。 然后,我尝试将一个新条目保存到方法中的mysql数据库中

Optional<Skill> skill=skillRepository.findByskillName(skillName);
        int id=0;
        if(skill.isPresent()) {
            id=Integer.valueOf(skill.get().getIdSkill());
        }
        else {
            Skill newSkill = new Skill();
            newSkill.setSkillName(skillName);
            skillRepository.save(newSkill);
        }

有人知道为什么会这样吗?如果不需要,我不想从sql workbench更改我的数据库。我想知道我是否缺少一个默认值属性,但我似乎无法联机找到任何内容

问题是您将列指定为不可为空,因此如果id字段未显式填充,hibernate将拒绝您的操作

按如下所示进行更改可以解决此问题。GenerationType.AUTO将让数据库负责id的生成

@Id
@GeneratedValue (strategy=GenerationType.AUTO)
@Column(name = "idskill") 
private int idskill;

我已经实现了这个,但是我现在收到了这个错误;java.sql.SQLIntegrityConstraintViolationException:键“PRIMARY”的重复条目“2”。我在表中已经有一些条目,但我希望它能够在任何时候添加它们,而不考虑已经存在的条目。如果是这样,只需检查最高id并遵循接受的答案,是否无法将其设置为从表中的最高值自动递增?这个方法似乎添加了很多不必要的查询ALTER TABLE的复杂性是什么?您的表自动增量=您的值?这回答了你的问题吗?
@Id
@GeneratedValue (strategy=GenerationType.AUTO)
@Column(name = "idskill") 
private int idskill;