2

我想通过添加一个方法来自定义 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

如果没有自定义,在 TopoRepositoryInterface 中声明的方法 findByName 可以通过添加 @Query("{'name':?0}") 注解自动实现。但是现在,既然有接口继承,就必须加代码

@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

您必须将存储库界面分成两部分。

第一个 - 包含您手动实现的方法的“自定义”将是:

public interface TopRepositoryCustom {
    long getPublishedTopoCount();
}

生成方法的第二个:

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

然后你只需要实现第一个存储库并记住遵循正确的命名约定。在以下位置查看更多信息:spring-data mongodb 自定义实现 PropertyReferenceExceptionSpring Data MongoDB 自定义实现参考

于 2013-06-24T22:06:11.390 回答