猿问

使用Hibernate允许ID = 0

我正在使用带有Springboot 1.5.14的休眠5.0.12。


我的实体有这个编号


@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = "UserID", nullable = true)

public int getUserId() {

    return this.userId;

}


public void setUserId(int userId) {

    this.userId = userId;

}

在我的数据库中有的礼物记录id = 0。


如果我阅读,编辑并保存了这些记录,休眠将使用生成的新ID复制这些记录。


如何配置休眠以允许id = 0值?


在eclispelink中,此配置为 "eclipselink.id-validation" = "NULL"


米琪卡哇伊
浏览 182回答 2
2回答

慕娘9325324

解决方案是将主键类型声明为Integer而不是int。@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name = "UserID", nullable = true)public Integer getUserId() {    return this.userId;}public void setUserId(Integer userId) {    this.userId = userId;}

繁花如伊

这个问题应该与数据库有关,因为即使您为Long / Int主键显式设置了零值(由于大多数数据库中设置默认设置的方式),通常也是由数据库“纠正”您的输入。即在MySQL的情况下,可以明确地设置ID零(0),但数据库仍然会忽略它,除非你IE添加/设置NO_AUTO_VALUE_ON_ZERO你的sql_mode。如果是MySQL / MariaDB,可以直接在my.cnf文件中进行更改,如果您不想重置数据库,则需要通过以下方式进行设置set global sql_mode='NO_AUTO_VALUE_ON_ZERO'我认为这个答案很重要,因为您利用了 @GeneratedValue(strategy=GenerationType.IDENTITY)
随时随地看视频慕课网APP

相关分类

Java
我要回答