среда, 3 сентября 2014 г.

Spring Data MongoDB

Если при попытке вставить документ в коллекцию ничего не происходит или возникает OptimisticalLockException (при том, что очевидных поводов для этого исключения не наблюдается) советую проверить индексы коллекции. Особенно если индексы используются для геолокации.

К примеру есть у нас такой репозиторий:
@Component
public class TestRepository extends BaseRepository<TestEntity> {
 @PostConstruct
    public void init() {
        ensureGeoIndex("testField");
    }
}
наследуется от такого класса:
@Component
public class BaseRepository<T extends BaseEntity> {
@Autowired
protected MongoOperations op;
protected void ensureGeoIndex(String fieldName) {
        GeospatialIndex index = new GeospatialIndex(fieldName);
        IndexOperations indexOperations = op.indexOps(domainClass);
        indexOperations.ensureIndex(index);
    }
}
Если попытаться вставить запись вот так:
TestEntity testEntity=new TestEntity();testEntity.setTestField("testValue");testRepository.save(testEntity);
в базу ничего не запишется, т.к. монга ожидает в качестве значения примерно такую структуру:
{ type: "Point", coordinates: [ -1, 1 ] }

Комментариев нет:

Отправить комментарий