【发布时间】:2016-07-21 20:30:43
【问题描述】:
我在 MyEclipse 中使用 Scaffolding 生成 Web 应用程序项目,使用 Spring MVC 和 MySQL 数据库。请给我一些线索来解决下面的问题。
我遇到了 id 主键的问题。如果我使用它不会自动增加事件: @GeneratedValue(strategy=GenerationType.IDENTITY) @GeneratedValue(策略=GenerationType.AUTO) @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(strategy=GenerationType.TABLE)
我有几个主键设置为 AUTO_INCREMENT 的表。像这个例子:
CREATE TABLE IF NOT EXISTS `ehealthdb`.`timestamp` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '',
`login_date` DATETIME NULL COMMENT '',
`logout_date` DATETIME NULL COMMENT '',
`create_date` DATETIME NOT NULL COMMENT '',
`update_date` DATETIME NULL COMMENT '',
`isActive` TINYINT(1) NULL COMMENT '',
PRIMARY KEY (`id`) COMMENT '')
ENGINE = InnoDB;
当我尝试使用生成的帖子 URL 和以下 json 有效负载使用保存时:
{
"loginDate":"1374839856000",
"logoutDate":"1374839856000",
"createDate":"1374839856000",
"updateDate":"1374839856000",
"isActive":true
}
请求处理失败;嵌套异常是 javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException:此类的 id 必须在调用 save() 之前手动分配: ehealth.domain.Timestamp
我认为这是由于缺少 @GeneratedValue 造成的,该脚手架尚未在我的主键上创建。我必须手动添加它,如下所示:
但是还是不行。它仍然得到错误。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) //add this
@Column(name = "id", unique = true, nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
Integer id;
【问题讨论】:
-
当你这样做时这不起作用:@Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") ??
-
是的,它不起作用。即使我尝试:@GeneratedValue(strategy=GenerationType.IDENTITY) @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(strategy=GenerationType.TABLE)
-
我使用提到的步骤(创建表,脚手架,添加@GeneratedValue 注释)尝试了这个并且没有问题。您可以尝试在没有 ID 值的情况下手动添加一行(使用 SQL 语句并提交)并检查它是否有效?
-
@TonyWeddle 您好,感谢您的帮助。如果我尝试使用 SQL 语句,它可以正常工作。 --- 现在我才发现,如果我发布 id=0 的对象,它会在数据库中自动增加。
-
所以,只是为了确认;如果表中已经有一个对象(在您的情况下 ID=0),那么您可以在不设置 ID 值的情况下保存新对象。那正确吗?如果是这样,那么我想你们都准备好了,不过,正如我所说,即使是一张空桌子,我也没有发现问题。我的测试是在 Linux 上进行的,但我不知道这是否重要。我的 MySql 版本是 5.5.47。
标签: mysql hibernate spring-mvc scaffolding myeclipse