像这样的代码,几乎同时向数据库插入数据 使用 oid 的话只能插入一条,因为生成的时间戳是一样的;我该怎么办?使用 uuid 或数据库自增长吗?在 repository.json 里该如何配置?? JSONObject obj = new JSONObject() .put('name', '张三') .put('ag ..

latke 主键使用 oid 主键冲突怎么破?

像这样的代码,几乎同时向数据库插入数据 使用 oid 的话只能插入一条,因为生成的时间戳是一样的;我该怎么办?使用 uuid 或数据库自增长吗?在 repository.json 里该如何配置??

 JSONObject obj = new JSONObject()
                    .put("name", "张三")
                    .put("age", 20);
            String id = userService.saveUser(obj);
            String id2 = userService.saveUser(obj);
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    51 引用 • 370 回帖 • 509 关注
4 回帖   
请输入回帖内容...
  • 88250

    给 oId 赋值再插入会优先使用赋的值。

    1 回复
  • kakayunmu        

    ok 谢谢了 ,我给 oId 赋值 UUID 好使了

  • 88250

    对了,可以自定义一个 id 生成器,然后在 local.props 里面配置一下类名,具体可参考这里(搜索 KEY_GEN)。

    1 回复
  • kakayunmu        

    感谢老哥🙏 自己实现了个 UUID 的 测试好用;使用框架的 TimeMillisKeyGenerator 也是可以的 。我发现我的测试代码有问题。。。😳 同一个对象插入 2 次。。当然是 ID 重复了。。。(不过如果是高并发的话 TimeMillisKeyGenerator 应该也会出现生成重复 ID 的可能吧 。。感觉一般系统够用了)

    package org.kakayunmu.util;
    
    import org.b3log.latke.repository.KeyGenerator;
    
    import java.util.UUID;
    
    public class UUIDKeyGenerator implements KeyGenerator<String> {
        @Override
        public String gen() {
            return UUID.randomUUID().toString();
        }
    }
    
    
    keyGen=org.kakayunmu.util.UUIDKeyGenerator