我想通过添加一个方法来自定义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()编写自己的代码,并且让@Ban注释实现findByName()?非常感谢你。
答案 0 :(得分:3)
您必须将存储库接口拆分为两个。
第一个 - 包含您手动实现的方法的“自定义”将是:
public interface TopRepositoryCustom {
long getPublishedTopoCount();
}
生成方法的第二个:
public interface TopRepository extends MongoRepository<Topo, String>, TopRepositoryCustom {
@Query("{'name':?0}")
Topo findByName(String name);
}
然后你只需要实现第一个存储库并记住遵循正确的命名约定。有关详情,请参阅:spring-data mongodb custom implementation PropertyReferenceException和Spring Data MongoDB Custom implementations reference