我在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)
这些都是默认值,所以没有必要放在那里。不过,我不确定这是否能解决你的问题。