2017-02-21 7 views
0

私は与えられたリポジトリとクラスに関連付けられているすべてのドキュメントを削除するdeleteAll関数を確立しようとしています。これを行うために、私はカスタムN1QLクエリを作成しました。しかし、後のデータベース操作が行われる前に、Couchbaseインデックスを更新する必要があります。私の推測では、この動作を達成するためにクエリの一貫性レベルを変更する必要があるということです。 Herehere私はCouchbaseTemplateを使ってこれを行ういくつかの例を見出しました。しかし、私のテンプレートはnullです。誰か私が間違っていることを教えてもらえますか?Springのデータ整合性を定義するCouchbase

public void deleteAll() throws DBException { 
    CouchbaseOperations couchbaseTemplate; 
    try { 
     couchbaseTemplate = templateProvider.resolve(getRepository().getClass(), getClassName().getClass()); 
    } catch (Exception e) { 
     throw new DBException("Could not get couchbase client", e); 
    } 

    String statement = String.format("DELETE FROM %s WHERE _class='%s'", 
            couchbaseTemplate.getCouchbaseBucket().name(), getClassName()); 

    ScanConsistency consistency = couchbaseTemplate.getDefaultConsistency().n1qlConsistency(); 
    N1qlParams queryParams = N1qlParams.build().consistency(consistency); 
    N1qlQuery query = N1qlQuery.simple(statement, queryParams); 
    N1qlQueryResult result = couchbaseTemplate.queryN1QL(query); 

    //Result handling 
    } 
} 

templateProviderは、自動で送信されます。

答えて

1

あなたのリポジトリとエンティティについては、コードスニペットから完全にはっきりしません。どのバージョンのSDCを使用していますか?

あなたは、操作マッピングBeanを使用している場合は、@EnableCouchbaseRepositoriesとCouchbaseのリポジトリを有効にしてください

@Repository 
public interface MyRepository extends CrudRepository<MyEntity, String> { 
} 

public class MyService { 
@Autowired 
MyRepository repo; 

@Autowired 
RepositoryOperationsMapping templateProvider; 
.... 
CouchbaseOperations operations = templateProvider.resolve(repo.getClass(),MyEntity.class); 

を使用して、特定のリポジトリとエンティティのための基本となるのCouchbaseテンプレートを取得します。リポジトリがcouchbaseのみを使用する場合は、couchbaseテンプレートBeanを直接取得することもできます。

@Autowired 
CouchbaseTemplate template; 
関連する問題