我正在尝试学习mongodb,同时使用spring框架编写一个简单的休息申请。

我有一个简单的模型:

@Document
public class Permission extends documentBase{

@Indexed(unique = true)
private String name;

public   Permission(String name) {
    this.name = name;       
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
.

然后我有一个简单的dao:

@Repository
@Transactional 
@Profile({"production","repositoryTest","mongoIntegrationTest"})
public class DaoImpl   implements DAO  {

@Autowired
protected MongoTemplate mongoTemplate;

public <T> T addObject(T object) {               
     mongoTemplate.insert(object);        
     return object; 
}
.

我有我的集成测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml", classpath:IntegrationContext.xml"},loader = TestXmlContextLoader.class)
@ActiveProfiles("mongoIntegrationTest")
public class RepositoryIntegrationTest extends AccountTestBase{

    @Autowired DAO repository;
    @Autowired WebApplicationContext wac;

    @Test
public void AddPermission() { 
    Permission permission_1 = new Permission("test");           
    Permission permission_2 = new Permission("test");           
    repository.addObject(permission_1);
    repository.addObject(permission_2);
}
}
.

我的配置:

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

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

我期待,在添加“permission_2”时,他们将是一个异常从MongoDB抛出的例外,它将被春天翻译,并且在DAO中捕获作为DataAccessException。

从mongodb看日志文件我可以看到抛出重复的异常,但它永远不会到达我的DAO。

所以,我想我做错了什么,但目前,我对自己的误片盲目。

// lg

有帮助吗?

解决方案

确保将WriteConcernMongoTemplate配置为非默认(例如WriteConcern.SAFE)。默认情况下,MongoDB在Fire-And-Forget模式下,通常不会丢失索引违规或服务器错误的异常。

其他提示

仍然努力解决这个问题。 芬良地,我成功地获得了exeption翻译工作。mongodb抛出一个例外,它被翻译成Spring数据例外。

现在我遇到了另一个问题。

我的DAO也如上所述,还有以下代码:

     @ExceptionHandler(DataAccessException.class)
     public void handleDataAccessException(DataAccessException ex) {
            // For debug only
                            DataAccessException test = ex;
            test.printStackTrace();

      }
.

我期待这个代码捕获异常,但这不是这种情况。

为什么不呢?

// lasse

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top