当前位置:  开发笔记 > 编程语言 > 正文

Spring Data MongoDB尝试为自定义存储库方法生成查询

如何解决《SpringDataMongoDB尝试为自定义存储库方法生成查询》经验,为你挑选了1个好方法。

基于Spring Data Document文档,我提供了一个存储库方法的自定义实现.自定义方法的名称是指域对象中不存在的属性:

@Document
public class User {
    String username;
}

public interface UserRepositoryCustom {
    public User findByNonExistentProperty(String arg);
}

public class UserRepositoryCustomImpl implements UserRepositoryCustom {
    @Override
    public User findByNonExistentProperty(String arg) {
        return /*perform query*/;
    }
}

public interface UserRepository
        extends CrudRepository, UserRepositoryCustom {

    public User findByUsername(String username);
}

但是,也许是因为我选择了方法名称(findByNonExistentPropertyName),Spring Data尝试解析方法名称,并从中创建查询.当它找不到nonExistentPropertyUser,会抛出异常.

可能的决议:

    我在如何提供自定义方法的实现方面犯了错误吗?

    有没有办法指示Spring不尝试根据此方法的名称生成查询?

    我是否必须避免使用Spring Data识别的任何前缀?

    以上都不是.

谢谢!



1> Oliver Drotb..:

UserRepositoryImpl当我们尝试根据找到的Spring Data存储库接口的名称查找它时,必须命名您的实现类(如果您坚持使用默认配置).我们从这个开始的原因是我们无法可靠地知道您扩展的哪个接口是具有自定义实现的接口.鉴于这样的情况

public interface UserRepository extends CrudRepository,
  QueryDslPredicateExecutor, UserRepositoryCustom { … }

我们不得不以某种方式硬编码接口,不检查自定义实现类,以防止意外接收.

所以我们通常建议提出一个命名约定,让我们说Custom接口的后缀包含手动实现的方法.然后,您可以CustomImpl使用元素的repository-impl-postfix属性设置存储库基础结构,以使用as后缀来获取实现类repositories:


参考文档中有关于此的更多信息,但似乎您至少已经对此进行了简要检查.:)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有