【问题标题】:When insert uuid (Type UUID) into mysql report duplicate entry for key PRIMARY将 uuid(UUID 类型)插入 mysql 时报告键 PRIMARY 的重复条目
【发布时间】:2016-01-12 02:19:59
【问题描述】:

在代码中,通过UUID post_uuid = uuidGenerator.generate()生成一个UUID,然后插入到mysql中。

   Connection conn = sql2o.beginTransaction();
   UUID postUuid = uuidGenerator.generate();

   conn.createQuery("insert into posts(post_uuid, title, content, publishing_date) values (:post_uuid, :title, :content, :date)")
        .addParameter("post_uuid", postUuid.toString())
        .addParameter("title", title)
        .addParameter("content", content)
        .addParameter("date", new Date())
        .executeUpdate();

   categories.forEach(category -> 
        conn.createQuery("insert into posts_categories(post_uuid, category) VALUES (:post_uuid, :category)")
        .addParameter("post_uuid", postUuid.toString())
        .addParameter("category", category)
        .executeUpdate());

   conn.commit();
   return postUuid;

RandomUuidGenerator 类

     public class RandomUuidGenerator implements UuidGenerator{

     @Override
     public UUID generate() {
        // TODO Auto-generated method stub
        return UUID.randomUUID();
     }

   }

在mysql中,post_uuid的字段是CHAR(36)

运行代码的时候报错

错误指向第二个插入sql addParameter("category", category).executeUpdate())

【问题讨论】:

  • 应该post_uuid.toString()转成字符串?
  • 你是如何生成你的 uuid 的?另外你为什么使用 uuids 而不是整数?
  • 我只是在上面发布了 RandomUuidGenerator。这是 SparkJava 的教程,我在使用 Postgresql 时从 MySql 更改数据库

标签: java mysql uuid


【解决方案1】:
它说在表 posts_categories 中它具有键 PRIMARY 的重复条目

不要让post_uuid 成为posts_categories 的主键。
对于集合中的每个元素 categories,您使用相同的 postUuid 运行 INSERT 语句。

【讨论】:

    【解决方案2】:

    尝试使用它的字符串值

     .addParameter("post_uuid", postUuid.toString ())
    

    【讨论】:

    • 我试过了,但是一个新的问题是executeUpdate中的Error, Duplicate entry 'dd5f5e44-c549-4bb9-b1a4-009bca084028' for key 'PRIMARY'
    • uuidGenerator 是从哪里来的?
    • uuidGenerator 是 UuidGenerator 类的一个实例
    • 它来自什么库?
    • 我自己写的。是return UUID.randomUUID()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多