【问题标题】:Spring Data Couchbase: Automatic ID generationSpring Data Couchbase:自动 ID 生成
【发布时间】:2016-05-01 06:12:26
【问题描述】:

我正在使用@Id 注释设置一个文档,在我的测试中我得到一个MappingException,因为在创建新文档时没有设置 ID。 spring-data + couchbase 是否无法自动为新文档分配ID?

【问题讨论】:

    标签: spring-data-couchbase


    【解决方案1】:

    Couchbase 中没有自动生成 ID,因此您需要设置一个。

    请记住,Couchbase 可以将异构数据存储在同一个 Bucket 中,因此默认情况下,如果您有多种类型的实体,它们最终会存储在同一个存储单元中。因此,如果您有例如。 UserProduct 实体,创建并保存 User 其中 @Id 是“foo”,然后一个 Product 也是 id-ed “foo” 将最终用 Product 覆盖 User

    我的意思是,您必须提供@Id 并且确保没有 ID 冲突,即使跨实体类也是如此。

    【讨论】:

      【解决方案2】:

      截至提交 069ceea spring-data-couchbase 似乎支持使用通过属性或唯一 UUID 生成的密钥自动生成密钥。有关如何使用它的文档,请参阅 HERE

      【讨论】:

      【解决方案3】:

      这是正确的答案。

      @Document
      public class User {
           @Id @GeneratedValue(strategy = UNIQUE)
           private String id;
           ...
      }
      

      根据 this link

      【讨论】:

        【解决方案4】:

        此外,Couchbase Java SDK 还提供了一个 UUID 生成器,可以为您提供帮助。

        关于UUID here的讨论。

        【讨论】:

        • 是的,使用 Couchbase 的原子计数器文档可以用于为 ID 生成序列。除非在每种类型的文档中使用相同的计数器,否则您仍然需要例如。使用前缀来确保 id 的唯一性。
        【解决方案5】:

        您可以使用 Java 将 UUID 生成为唯一的。这将由 Java 生成 UUID。可在 Couchbase PK 中用作唯一。

        @Document
        public class BasicEntity {
        
        @Id
        @Field
        private String _id;
        
        /**
         * @return the _id
         */
        public String get_id() {
            return _id;
        }
        
        /**
         */
        public void set_id() {
            this._id = UUID.randomUUID().toString();
           }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-25
          • 2015-11-15
          • 1970-01-01
          • 1970-01-01
          • 2014-05-16
          • 1970-01-01
          相关资源
          最近更新 更多