【问题标题】:GeneratedValue does not get a unique new valueGeneratedValue 没有得到唯一的新值
【发布时间】:2013-09-26 13:00:29
【问题描述】:

我的休眠配置如下:

Entity
@Table (name = "statuspaatelling")
public class StatusPaaTelling {

private Long statusPaaTellingId;

@Id
@Column(name = "statusPaaTellingID")
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getStatusPaaTellingId() {
    return statusPaaTellingId;
}

当我创建新元素时,它运行良好,但突然之间,它创建了已经存在的值。而且我无法创建新元素,因为我的主键有重复条目。我正在使用 MySQL 数据库。

Duplicate entry '3155220' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO statuspaatelling (statusPaaTellingID, something) VALUES(?, ?)

我认为它可能首先发生在我导入数据库的转储并切换到使用它时。我也试过在没有运气的情况下切换回来,但它们的设置完全相同,所以我应该无所谓。任何人都知道为什么 GeneratedValue 突然不起作用?

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    您可能正在点击this MySQL bug(7 年前开业!!!)。如果您阅读 cmets,有人发布了使用 sed 修复 MySQL 转储的解决方法,例如:

    sed -i -e 's/ AUTO_INCREMENT=[0-9]\+//' mydump.sql
    

    您还可以通过sed 命令输出mysqldump

    【讨论】:

    • 是的,我的转储确实包含 AUTO_INCREMENT=xxx。我使用 sed 命令删除了它,但它仍在创建现有值。
    • 导入数据后是否重启运行Hibernate的进程?
    【解决方案2】:

    您是否将该列声明为自动增量?

    http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

    如果没有将该列声明为自动递增,请点击以下链接:

    ALTER table - adding AUTOINCREMENT in MySQL

    【讨论】:

    • 是的,我有。 CREATE TABLE statuspaatelling (statusOppdatert datetime DEFAULT NULL, statusPaaTellingID int(11) NOT NULL AUTO_INCREMENT。我以前工作过,一天前刚停止工作。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2020-02-01
    • 2021-11-30
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多