Spring MongoRepository自定义查询

Spring MongoRepository自定义查询,spring,mongodb,mongorepository,Spring,Mongodb,Mongorepository,大家好,我对使用Spring和MongoRepository还不熟悉,我正在使用Spring的MongoRepository为MongoDB创建一个自定义查询。 我想做的是返回模型中另一个变量的自定义查询,而不是对象id 对于我的型号,我有: @Document(collection = "useraccount") public class UserAccounts { @Id private String id; private String accountNum

大家好,我对使用Spring和MongoRepository还不熟悉,我正在使用Spring的MongoRepository为MongoDB创建一个自定义查询。 我想做的是返回模型中另一个变量的自定义查询,而不是对象id

对于我的型号,我有:

@Document(collection = "useraccount")
public class UserAccounts {

    @Id
    private String id;

    private String accountNumber;
    private String firstName;
    private String lastName;

    // getters and setters
}
在我的存储库中,我只是扩展了通用MongoRepository:

@Repository
public interface UserAccountsRepository extends MongoRepository<UserAccounts, String> {


}
@存储库
公共接口UserAccountsRepository扩展了MongoRepository{
}
我正在尝试创建一个自定义查询,该查询返回我的UserAccountsService中的accountNumber:

@Service
public class UserAccountsService {

    private final UserAccountsRepository userAccountsRepository;

    public UserAccountsService(UserAccountsRepository userAccountsRepository) {
       this.userAccountsRepository = userAccountsRepository;
    }

    // generic find by Object id
    public UserAccounts findOne(String id) {
    Optional<UserAccounts> userAccountsOptional = 
        userAccountsRepository.findById(id);
        if(!userAccountsOptional.isPresent()) {
           throw new RuntimeException("User Account Not Found");
        }

        return userAccountsOptional.get();
    }

    // would like to implement custom query to return UserAccount if 
    // found by accountNumber variable
    public UserAccounts findOneByUserAccountNumber(String accountNumber) {

          return dormantAccountsRepository.findOne(*need query here*);;
      }
}
@服务
公共类UserAccountsService{
私有最终用户帐户存储用户帐户存储;
公共用户帐户服务(用户帐户存储用户帐户存储){
this.userAccountsRepository=userAccountsRepository;
}
//通用按对象id查找
公共用户帐户findOne(字符串id){
可选用户帐户可选=
userAccountsRepository.findById(id);
如果(!userAccountsOptional.isPresent()){
抛出新的RuntimeException(“未找到用户帐户”);
}
返回userAccountsOptional.get();
}
//要实现自定义查询以返回UserAccount,如果
//由accountNumber变量找到
public UserAccounts findOneByUserAccountNumber(字符串accountNumber){
返回dormantAccountsRepository.findOne(*此处需要查询*);;
}
}
我如何创建一个自定义查询来通过accountNumber而不是对象id查找用户帐户


任何帮助都很好,谢谢

您不需要实现任何自定义方法。这种查询是开箱即用的。对于您的案例,请在
UserAccounts-findFirstByAccountNumber(字符串accountNumber)
中的
UserAccountsRepository
中添加方法。更感谢我添加了这个,但是我该怎么做才能找到这个帐户并在UserAccountService类中返回它呢?Yw。像处理任何查询一样调用回购协议
public UserAccounts findOneByUserAccountNumber(String accountNumber){return userAccountsRepository.findFirstByAccountNumber(accountNumber);}
@Veeram Humm很抱歉打扰您,但它似乎无法从模型中找到accountNumber变量。userAccountsRepository.findFirstByAccountNumber(accountNumber)如何知道需要从模型中查找accountNumber?我一直从这个返回类型中得到一个500错误。感谢您迄今为止提供的帮助查看
findOneByUserAccountNumber(String accountNumber)
账号已在服务之外传递,因此我;I’’我不知道你说的是什么,userAccountsRepository.findFirstByAccountNumber(accountNumber)如何知道需要从模型中查找accountNumber。帐号从服务传递到存储库。