2013-07-23 26 views
6

私は、Spring DataのMongoTemplateに、save、upsert、insert、updateFirstなどのさまざまな種類の「オブジェクトの保存」操作が多数存在することに気付きました。なぜSpring DataのMongoRepositoryが制限されていますか?

一方、Spring DataのMongoRepositoryインターフェースには、「保存」という1つの永続性メソッドがあります。さて、明らかに、私がcreate/update/upsert機能を望むなら、かなり簡単に実装することができます。 "保存"を呼び出す前に取得して、エンティティが存在するかどうかを確認してください。しかし、MongoTemplateにはこのような多様なオプションがあります(私は保存とアップサーットの違いを理解できません)が、Spring Dataのリポジトリは非常に限られています。

作成/更新のセマンティクスを使用する場合、またはget + null check + repository.saveとaとの違いは、Spring Data MongoRepositoriesをそのメソッドをカスタマイズせずに使用するのは無駄だと思いますか? mongoTemplate.insertも気にするのに無関係ですか?

答えて

0

春データは、repository patternです。 Repositoryは、DAOレイヤーを抽象化したもので、ドメインエンティティの一般的な格納および取得に使用されます。リポジトリ層の下部には、MongoTemplateが使用されるDAO層部分があります。

したがってRepositoryには論理的な保存方法があります。ドメインの観点からは、ドメインエンティティがどのように永続化されているか気にする必要はありません。 saveメソッドを呼び出すだけでMongoTemplateの使用はMongoRepositoryの実装に依存します。

3

独自のリポジトリをXXXRepositoryCustomを使用してカスタマイズし、その実装を作成することができます。上記インタフェースは、独自のAccountRepositoryCustomインタフェースを拡張

public interface AccountRepository extends MongoRepository<Account, String>, AccountRepositoryCustom{ 

    @Query("{ 'email' : ?0 }") 
    Account findByEmail(String email); 

} 

注意:ここで

は一例です。

その後、独自のAccountRepositoryCustom定義:それのための実装を書き、

public interface AccountRepositoryCustom { 

    public boolean updateAccountToken(String id, String token); 

} 

次へ:

public class AccountRepositoryCustomImpl implements AccountRepositoryCustom { 

    @Autowired 
    private MongoTemplate mongoTemplate; 

    @Override 
    public boolean updateAccountToken(String id, String token) {  
      // your code 
    } 
} 
+2

はい、私はそれを前にしています。しかし、これは、Spring Dataのリポジトリの主なポイントが定型コードIMOを減らすことである場合に、更新と作成メソッドを得るために書く定型コードです。 – CorayThan