Hibernate / SQLException:字段没有默认值

时间:2014-01-20 21:04:47

标签: 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 = 11, unique = true, nullable = false)
private int actorID;
....

错误:

ERROR: Field 'actorID' doesn't have a default value

尝试创建新的Actor对象并将其保存到数据库时会遇到此错误。

我已尝试使用其他生成策略,并根据类似问题的答案删除/重建表/整个数据库。到目前为止没有运气。

感谢您的时间, 塞缪尔史密斯

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

3 个答案:

答案 0 :(得分:2)

尝试使用

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

这应该可以解决您的问题。如果保存,请将actorID保留为null。

确保数据库正常工作,尝试编写插入语句而不插入ID,并查看纯插入是否正常工作。如果直接插入对数据库起作用,则可以开始对hibernate进行故障排除。

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

actorID INT(11)NOT NULL AUTO_INCREMENT PRIMARY KEY,

但它应该以任何方式工作。

答案 1 :(得分:1)

您的错误出现在您的表定义中。

必须:

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

你错过了actorID中的AUTO_INCREMENT。

答案 2 :(得分:1)

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