@Id在monogdb spring mvc中生成了值

时间:2016-07-02 23:13:51

标签: spring mongodb spring-mvc spring-boot

我正在尝试为我的数据库生成不同的id但它保持生成0并删除旧记录如何在此代码中生成id知道我需要id为前端角度服务的int。

@Document(collection = "tasks")
public class Task {

    @Id
    @Field(value = "task_id")
    private int id;

    @Field(value = "task_name")
    private String taskName;

    @Field(value = "task_description")
    private String taskDescription;

    @Field(value = "task_priority")
    private String taskPriority;

    @Field(value = "task_status")
    private String taskStatus;

    @Field(value = "task_archived")
    private int taskArchived = 0;

   //set and get

}

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用Java提供的方法之一生成唯一ID

  1. UUID(通用唯一ID)
  2. SecureRandom和MessageDigest
  3. UID
  4. 原子整数增量(这就是你需要的)
  5. 以及许多其他方法
  6. 根据您的需求选择最合适的一个。以下是使用AtomicInteger解决问题的方法:

        @Document(collection = "tasks")
        public class Task {
    
            @Id
            @Field(value = "task_id")
            private int id;
    
            @Field(value = "task_name")
            private String taskName;
    
            @Field(value = "task_description")
            private String taskDescription;
    
            @Field(value = "task_priority")
            private String taskPriority;
    
            @Field(value = "task_status")
            private String taskStatus;
    
            @Field(value = "task_archived")
            private int taskArchived = 0;
    
            @Transient
            private AtomicInteger incrementor = new AtomicInteger(0);
    
            public Task() {
              id = incrementor.incrementAndGet(0);
            }
                 //set and get
        }
    

    此外,您必须使用@Transient来避免增量器持久存储在文档存储中。

答案 1 :(得分:0)

我找到了两种方法来做到第一次

private static final AtomicInteger counter = new AtomicInteger();

    public static int nextValue() {
        return counter.getAndIncrement();
    }

    /*******************/

    @Id
    @Field(value = "task_id")
    private int id = nextValue();

第二个我认为一个技巧是使用当前日期作为整数

private int id = (int) (new Date().getTime()/1000);