【问题标题】:Remove Duplicate entry '59' for key 'PRIMARY in Hibernate删除 Hibernate 中键“PRIMARY”的重复条目“59”
【发布时间】:2017-06-19 01:59:06
【问题描述】:

我是 Hibernate 的新手。我正在使用带有 JPA 的 Hibernate。我有一个带注释的实体类和一个与该实体类相关的表。

@Entity 
public class Test implements Serializable { 
    @Id
    @GenericGenerator(name="inc" , strategy="identity")
    @GeneratedValue(generator="inc") 
    private int id; 

    private String address; // setter getter and constructor 
}

当保存这个实体时,它会将数据插入到数据库中。但是在应用程序运行过程中,另一个应用程序正在将数据插入同一个表中。当我的应用程序尝试保存数据时,为键“PRIMARY”生成重复条目“59”异常。所以我想使用一个生成器,它可以在数据库级别而不是应用程序级别插入数据并生成 id,并且标识符必须保存回我的实体。

【问题讨论】:

    标签: mysql hibernate jpa spring-data


    【解决方案1】:

    您不必指定生成器。您可以使用默认生成器,而永远不要手动设置 id。如果错误仍然出现,请发布您的合并/持久方法。

    更多关于生成器的信息可以在这里找到https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

    @Entity
    public class Test implements Serializable { 
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id; 
    
        private String address; // setter getter and constructor 
    }
    

    【讨论】:

      【解决方案2】:

      使用表生成器策略或序列生成器。

      【讨论】:

      • 我同意你的看法。但是我需要一个生成器,它可以在每次插入实体之前获取 max(id)。 Bcz 可能是,有人手动将数据插入表中。那时表生成器也失败了。请指导我。
      • 如果有人直接更新表,那么在此您需要手动处理 ID,即在插入记录之前获取最大 id 并对其执行 +1 并持久化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-17
      • 2014-05-30
      • 2017-02-17
      • 2012-10-13
      • 2012-08-18
      • 2012-07-23
      • 2013-09-30
      相关资源
      最近更新 更多