2016-07-02 17 views
0

Я пытаюсь создать другой идентификатор для моего db, но он продолжает генерировать 0 и удалять старую запись, как я могу сгенерировать идентификатор в этом коде, зная, что мне нужно, чтобы id был int для front концевое угловое обслуживание.@Id сгенерированное значение в monogdb spring mvc

@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 

} 

ответ

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); 
+0

Я думаю, что лучший способ - это то, что я вам посоветовал. Имейте инкрементор и практикуйте атомарные приращения на нем. Предполагая, что в этом классе могут играть несколько потоков. И @Transient - это игнорирование поля в настойчивости. См. Мое редактирование –

0

Самый простой способ два генерировать уникальный идентификатор с одним из способа, предложенного Java

  1. UUID (Universal Unique ID)
  2. SecureRandom и MessageDigest
  3. приращений Atomic Целые
  4. UID
  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, чтобы избежать инкрементор быть сохраняется в хранилище документов.

+0

Что такое переменная аи в ид = аи. incrementAndGet (0); –

+0

@Transient не применимо для конструктора –

+0

Я решил его с помощью небольшого трюка private int id = (int) (new Date(). GetTime()/1000); –

Смежные вопросы