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

Java Hibernate/SQLException:字段不';没有默认值,java,mysql,hibernate,Java,Mysql,Hibernate,使用以下命令生成mySQL表: CREATE TABLE `actors` ( `actorID` INT(11) NOT NULL, `actorName` VARCHAR(255) NOT NULL, PRIMARY KEY AUTO_INCREMENT (actorID) ); 映射类: @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "actorID", length

使用以下命令生成mySQL表:

CREATE TABLE `actors` (
    `actorID` INT(11) NOT NULL,
    `actorName` VARCHAR(255) NOT NULL,
     PRIMARY KEY AUTO_INCREMENT (actorID)
);
映射类:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "actorID", length = 11, unique = true, nullable = false)
private int actorID;
....
错误:

ERROR: Field 'actorID' doesn't have a default value
尝试创建新的Actor对象并将其保存到数据库时,会出现此错误

根据对类似问题的回答,我尝试过使用其他生成策略,删除/重建表/整个数据库。到目前为止运气不好

谢谢你抽出时间, 塞缪尔·史密斯

编辑:删除表并使用shippi显示的SQL语法重新创建它似乎可以解决我的问题。

试着使用

@GeneratedValue(strategy=GenerationType.AUTO)
@Id
@Column(name = "actorID")
private int actorID;
这将解决您的问题。如果保存,则将actorID保留为空

还要确保DB工作正常,尝试在不插入ID的情况下编写insert语句,让我们看看纯insert是否工作。如果直接插入对数据库有效,则可以开始对hibernate进行故障排除

还有一个小点,我在定义列的同一行中定义PH值和自动增量:

actorID
INT(11)非空自动增量主键


但这两种方法都应该有效。

您的错误在表定义中

必须是:

CREATE TABLE `actors` (
   `actorID` INT(11) NOT NULL AUTO_INCREMENT,
   `actorName` VARCHAR(255) NOT NULL,
   PRIMARY KEY AUTO_INCREMENT (actorID)
);

你错过了actorID中的自动增量。

我也遇到了同样的问题,解决了它,清空整个数据库,清空并重新运行应用程序。一切都不正常。

您可以通过mysql workbench插入到表中而不指定actorID吗?Errrhh。。。我刚才碰到了这个问题。真的很难找到。如果将
@列
注释吹走,会发生什么?不需要IMHO.Minor细节,但int不能为null。它将被初始化为零。好的,我将变量映射更改为您上面描述的,它没有任何效果。但是,我删除了整个数据库,并重新构建了所有表,这次使用了与您在这里展示的类似的SQL语法,它工作得非常好。我不认为是语法改变本身造成的,但因为它与以前完全不同,它在某个地方强制刷新,从而解决了问题(最初添加了AUTO_INCREMENT,因此可能新数据库没有缓存或其他什么…我不确定)我也遇到了同样的问题,解决了清空整个数据库以清空并重新运行应用程序的问题。一切都不正常。这仍然会导致相同的错误,因为
actorName
也没有定义默认值。在数据库中创建新记录时,通常不手动设置ID。但必须设置所有其他列,特别是“无空”列。为列actorName设置默认值毫无意义。