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语法重新创建它似乎解决了我的问题。
答案 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)
我遇到了同样的问题,解决了它清空整个数据库以清空并重新运行应用程序。一切都不好。