Spring@GeneratedValue注释不适用于自动增量字段



我在MyEclipse中使用脚手架生成Web应用程序项目,使用springMVC和MySQL数据库。请给我一些线索来解决下面的问题。

id主键有问题。如果我使用以下内容,它不会自动递增事件:@GeneratedValue(策略=GenerationType.IDENTITY)@GeneratedValue(策略=GenerationType.AUTO)@GeneratedValue(策略=GenerationType.SQUENCE)@GeneratedValue(策略=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;

当我尝试使用生成的postURL和以下json负载使用保存时:

{
 "loginDate":"1374839856000",
 "logoutDate":"1374839856000",
 "createDate":"1374839856000",
 "updateDate":"1374839856000",
 "isActive":true
}

请求处理失败;嵌套异常是javax.persistence.PersistenceException:org.hibernate.id.IdentifierGenerationException:此类的id在调用save()之前必须手动分配:ehalth.domain.时间戳

我认为这是由于缺少@GeneratedValue引起的,脚手架没有在我的主键上创建它。我不得不手动添加它,如下所示:

但它仍然不起作用。它仍然会出错。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) //add this 
@Column(name = "id", unique = true, nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
Integer id;

根本不要尝试设置ID字段。它是自动处理的。

使用@GeneratedValue(策略=GenerationType.IDENTITY)。确保您的Persistence.xml具有

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

可能应该使用Hibnerate版本4或5。

此外,我从未在ID列上看到过FetchType。移除此。

@Basic(fetch = FetchType.EAGER)

我这样做:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

此外,可能应该了解完整的设置。什么版本的Spring?

您应该删除以下内容:

@Column(name = "id", unique = true, nullable = false)
@Basic(fetch = FetchType.EAGER)

这些都是默认值,所以没有必要放在那里。不过,我不确定这是否能解决你的问题。

相关内容

  • 没有找到相关文章

最新更新