2

メソッドを 1 つ追加して MongoRepository をカスタマイズし、MongoRepository によって提供される実装済みのメソッドを引き続き使用したいと考えています。以下はコードです:

public interface TopoRepositoryInterface extends MongoRepository<Topo, String>
{
    @Query("{'name':?0}")
    public Topo findByName(String name);

    public long getPublishedTopoCount();
}

実装宣言は次のとおりです。

public class TopoRepositoryImpl extends SimpleMongoRepository<Topo, String> implements TopoRepositoryInterface

カスタマイズがなければ、 @Query("{'name':?0}") アノテーションを追加することで、TopoRepositoryInterface で宣言されたメソッド findByName を自動的に実装できます。しかし今、インターフェイスの継承があるので、コードを追加する必要があります

@Override
public Topo findByName(String name)
{
    Topo topo = getMongoOperations().findOne(Query.query(Criteria.where("name").is(name)), Topo.class);
    return topo;
}

getPublishedTopoCount() のみの独自のコードを記述し、findByName() を @Query アノテーションによって実装したままにする方法はありますか? どうもありがとうございました。

4

1 に答える 1

3

リポジトリ インターフェイスを 2 つに分割する必要があります。

最初のもの - 手動で実装するメソッドを含む「カスタム」は次のようになります。

public interface TopRepositoryCustom {
    long getPublishedTopoCount();
}

生成されたメソッドの 2 つ目:

public interface TopRepository extends MongoRepository<Topo, String>, TopRepositoryCustom {
    @Query("{'name':?0}")
    Topo findByName(String name);  
}

次に、最初のリポジトリを実装し、適切な命名規則に従うことを忘れないでください。詳細については、spring-data mongodb カスタム実装 PropertyReferenceExceptionおよびSpring Data MongoDB カスタム実装リファレンスを参照してください。

于 2013-06-24T22:06:11.390 に答える