Context
We develop a tree view. We want to have an incremental number for the new node.
Solution
@Service
class SequenceGeneratorService(val mongoOperations: MongoOperations) {
fun generateSequence(seqName: String?): Long {
val counter = mongoOperations.findAndModify(
query(Criteria("_id").`is`(seqName)),
Update().inc("seq", 1), FindAndModifyOptions.options().returnNew(true).upsert(true),
DatabaseSequence::class.java
)
return if (!Objects.isNull(counter)) counter!!.seq else 1
}
}
Usage
@Service
class NodeService(val sequenceGeneratorService: SequenceGeneratorService) {
fun createNewNode() {
val node = Node()
var node.id = sequenceGeneratorService.generateSequence("node_sequence")
}
}