为了账号安全,请及时绑定邮箱和手机立即绑定

使用Hibernate允许ID = 0

使用Hibernate允许ID = 0

米琪卡哇伊 2021-05-05 13:53:01
我正在使用带有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"
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

解决方案是将主键类型声明为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;

}


查看完整回答
反对 回复 2021-05-19
?
繁花如伊

TA贡献2012条经验 获得超12个赞

这个问题应该与数据库有关,因为即使您为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)


查看完整回答
反对 回复 2021-05-19
  • 2 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信