Generowanie unikalnych kluczy podstawowych - lambdaforg/Northwind_AGH GitHub Wiki
Ponieważ Spring Boot nie dostarcza usługi generowania automatycznie inkrementowanych unikalnych pól dla MongoDB (tak jak w przypadku np. JPA), do generowania pól z adnotacją @Id zastosowaliśmy tzw. generator sekwencji.
Pierwszym krokiem jest stworzenie dodatkowej kolekcji, która będzie przechowywała informacje o sekwencjach dla innych kolekcji.
@Document(collection = "database_sequence")
public class DatabaseSequence {
@Id
private String id;
private int seq;
}
Aby zidentyfikować sekwencje dla każdej kolekcji, dodajemy do mapowania tymczasowe statyczne pole SEQUENCE_NAME zawierające nazwę sekwencji (jej identyfikator). Pole zawiera adnotację @Transient więc nie będzie przechowywane w bazie danych.
@Document(collection = "user")
public class User {
@Transient
public static final String SEQUENCE_NAME = "users_sequence"
Ostatnim elementem jest serwis SequenceGeneratorService dostarczający metodę generateSequence() zwracającą kolejny element dla danej sekwencji. Poniżej znajduje się przykład tworzenia nowego obiektu i ustawiania unikalnego klucza podstawowego (id) z wykorzystaniem generatora sekwencji.
User user = new User();
user.setId(sequenceGenerator.generateSequence(User.SEQUENCE_NAME));
userRepository.save(user);