1

私は MongoDB を学び、同時に Spring フレームワークを使用して単純な REST アプリケーションを作成しようとしています。

私は単純なモデルを持っています:

@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 から例外がスローされ、Spring によって変換され、DAO で DataAccessException としてキャッチされることを期待しています。

MongoDb のログ ファイルを見ると、重複した例外がスローされていることがわかりますが、DAO には到達しません。

だから、、私は何か間違ったことをしていると思いますが、、、しかし現時点では、、私は自分の間違いに目がくらんでいます。

//lg

4

2 に答える 2

4

の をデフォルト以外のもの (例: WriteConcern)に設定してください。デフォルトでは、MongoDB はファイア アンド フォーゲット モードであり、通常、インデックス違反やサーバー エラーで例外をスローしません。MongoTemplateWriteConcern.SAFE

于 2012-10-04T15:33:40.730 に答える
1

まだこれに苦労しています。最後に、私は例外翻訳を機能させることに成功しました。MongoDbは、SpringData例外に変換される例外をスローします。

今、私は別の問題で立ち往生しています。

上に示した私のDAOにも次のコードがあります。

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

      }

このコードがスローされた例外をキャッチすることを期待していましたが、そうではありません。

なぜだめですか?

//ラッセ

于 2012-10-23T17:51:34.500 に答える