2013-08-15 2 views
0

Я использую mongoRepository.save(), но не могу получить информацию об ошибках, когда дубликаты предотвращают вставку. В качестве теста я вставляю дубликат имени пользователя, и монго просто игнорирует его. но когда имя пользователя уникально, оно вставляется, как ожидалось.Как получить сообщения об ошибках от mongoRepository.save()

Смотрите ниже моего класса обслуживания:

package com.onlinedateshow.service; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.mongodb.core.MongoTemplate; 
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 
import org.springframework.stereotype.Service; 

import com.mongodb.BasicDBObject; 
import com.onlinedateshow.data.model.User; 
import com.onlinedateshow.data.repo.user.UserRepository; 
import com.onlinedateshow.model.ui.RegisterUI; 
import com.onlinedateshow.model.util.RegisterMapper; 

@Service 
public class RegisterService { 
    @Autowired 
    private UserRepository userRepo; 

    @Autowired 
    MongoTemplate template; 

    public String addUser(RegisterUI registerData) { 

     User newUser = RegisterMapper.toPersistenceBean(registerData); 

     try{ 

      //does not return error, if duplicates are found, silently 
      //ignores the query 
      User saveduser = userRepo.save(newUser); 


      //below is what I want but don't know how to get it from a repository 
      //String error = template.getDb().getLastError().getErrorMessage(); 
      //return error; 
      return null; 


     }catch(Exception e){ 
      return e.getLocalizedMessage(); 
     } 
    } 


} 

и это мой UserRepository интерфейс:

package com.onlinedateshow.data.repo.user; 


import org.springframework.data.mongodb.repository.MongoRepository; 
import org.springframework.data.repository.PagingAndSortingRepository; 

import com.onlinedateshow.data.model.User; 

public interface UserRepository extends MongoRepository<User, String>, 
PagingAndSortingRepository<User, String> { 
    User findByEmail(String email); 

    User findById(String id); 

    User findByUserName(String userName); 
} 

И это мой XML-файл, который устанавливает MongoDbFactory:

<!-- Activate Spring Data MongoDB repository support --> 
    <mongo:repositories base-package="com.mydata.repo.user" /> 

    <!-- MongoDB host --> 
    <mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}" /> 
    <mongo:db-factory dbname="${mongo.db.name}" /> 

    <!-- Template for performing MongoDB operations --> 
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" 
     c:mongo-ref="mongo" c:databaseName="${mongo.db.name}" /> 

ответ

0

Убедитесь, что вы сконфигурировали подходящий WriteConcern по адресу. 0 или MongoDbFactory.

JavaDoc для соответствующего MongoTemplate метода является here, один для SimpleMongoDbFactory является here.

+0

Спасибо, Оливер, любая идея, как настроить MongoDbFactory с помощью Spring? Я ничего не могу найти. Я обновляю свой пост с помощью моей конфигурации XML. –

+0

Я обновил сообщение, чтобы содержать ссылки на соответствующие части JavaDoc. –

+0

Большое спасибо Оливер! Я продолжал искать и искать и, наконец, нашел способ добавить проблему в XML, мне понадобилось в моей декларации Bean. Следующая ссылка также содержит более полный пример. http://stackoverflow.com/questions/16531663/spring-data-mongodb-adding-credentials-for-mongodb-access –