/src/main/java/com/github/dansmithy/sanjuan/dao/SequenceMongoIdGenerator.java
https://github.com/dansmithy/sanjuan · Java · 44 lines · 33 code · 11 blank · 0 comment · 3 complexity · 35659e27ecd9ca4619bd229b7efc0d94 MD5 · raw file
- package com.github.dansmithy.sanjuan.dao;
- import javax.inject.Inject;
- import javax.inject.Named;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.data.mongodb.core.query.Query;
- import org.springframework.data.mongodb.core.query.Update;
- import com.mongodb.DBObject;
- @Named
- public class SequenceMongoIdGenerator implements MongoIdGenerator {
-
- private final MongoTemplate mongoTemplate;
- @Inject
- public SequenceMongoIdGenerator(MongoTemplate mongoTemplate) {
- this.mongoTemplate = mongoTemplate;
- }
- @Override
- public Long getNextLongId(String type) {
- Update update = new Update().inc("seq", 1);
- DBObject idObject = mongoTemplate.getCollection("seq").findAndModify(createSimpleQuery("_id", type).getQueryObject(), update.getUpdateObject());
- if (idObject == null) {
- createFirstLong(type);
- return getNextLongId(type);
- } else {
- return (Long)idObject.get("seq");
- }
- }
-
- private void createFirstLong(String type) {
- mongoTemplate.insert(new MongoSequence(type, new Long(1)));
-
- }
- private static <T> Query createSimpleQuery(String propName, T value) {
- return new Query(Criteria.where(propName).is(value));
- }
- }