mongoTemplate не может найти коллекцию и выдает исключение

Корневой context.xml:

<mongo:mongo id="mongo" host="localhost" port="27017" />
<mongo:db-factory dbname="meraComputer" mongo-ref="mongo" />

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>

<bean id="userDaoImpl" class="net.meraComputer.spring.daoImpl.UserDaoImpl">
    <property name="mongoTemplate" ref="mongoTemplate"/>
</bean>

UserDaoImpl:

private MongoTemplate mongoTemplate;

@Required
public void setMongoTemplate(MongoTemplate mongoTemplate) {
    this.mongoTemplate = mongoTemplate;
}

@Override
public void saveUser(UserAccount user) {
    if(mongoTemplate.collectionExists("userAccount")) {
        mongoTemplate.save(user);
    }else {
        mongoTemplate.createCollection("userAccount");
        mongoTemplate.save(user);
    }
}

У меня уже есть коллекция userAccount при сохранении первого UserAccount.

db.userAccount.find().pretty()
{
"_id" : ObjectId("568781929a0085d703e45e0e"),
"_class" : "net.meraComputer.spring.model.UserAccount",
"username" : "Test",
"password" : "$2a$10$XrDNeBw0vKTr0zEXVVLMy.N2L4wEzJ/C1lBAuvRQB6YC6EMFr3ws6",
"firstname" : "Test",
"lastname" : "Test",
"userRole" : [ ],
"roles" : [
    DBRef("role", "ADMIN")
]

Но когда я пытаюсь сопротивляться другому пользователю, он просто возвращает false mongoTemplate.collectionExists("userAccount") здесь и когда он переходит к части сохранения, он выдает исключение:

org.springframework.data.mongodb.UncategorizedMongoDbException: command failed [create]: { "serverUsed" : "localhost/127.0.0.1:27017" , "ok" : 0.0 , "errmsg" : "collection already exists" , "code" : 48}; nested exception is com.mongodb.CommandResult$CommandFailure: command failed [create]: { "serverUsed" : "localhost/127.0.0.1:27017" , "ok" : 0.0 , "errmsg" : "collection already exists" , "code" : 48}
org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:78)
org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1800)
org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:388)
org.springframework.data.mongodb.core.MongoTemplate.doCreateCollection(MongoTemplate.java:1413)

Я пытался:

mongoTemplate.getCollectionNames() - no result.
mongoTemplate.collectionExists(UserAccount.class) - false

1 ответ

Изменение моей зависимости на следующее решило мою проблему:

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb-parent</artifactId>
<version>1.8.2.RELEASE</version>
</dependency>
Другие вопросы по тегам