"像这样的代码,几乎同时向数据库插入数据 使用 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 框架。

    49 引用 • 360 回帖 • 511 关注
感谢    关注    收藏    赞同    反对    举报    分享
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
    
       感谢    赞同    反对    举报    折叠    分享    评论    回复