Spring Boot Mongodb通过ID搜索返回null [英] Spring Boot Mongodb search by ID returns null

查看:148
本文介绍了Spring Boot Mongodb通过ID搜索返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经用mongodb创建了一个spring boot项目,当我向集合中插入数据时,它会被插入,但是当我尝试通过idfindOne获取时,基于id的插入值总是返回null,我给出了我下面的模型类和插入方法,请告诉我哪里错了

I have created a spring boot project with mongodb , when i insert data into collection it get inserted but when i try to fetch from findOne by id the inserted value based on id it always returns null, I have given my model class and inserting method below,please tell me whats wrong

Account.java

@Document(collection = "account")
public class Account {

    @Id
    private long _id;

    @Field("account_name")
    private String accountName;

    @Field("connector_type")
    private String connectorType;

    @Field("xsiURI1")
    private String xsiURI1;

    @Field("xsiURI2")
    private String xsiURI2;

    @Field("oci1")
    private String OCI1;

    @Field("oci2")
    private String OCI2;

    @Field("telcomadmin_username")
    private String telcomadminUsername;

    @Field("telcomadmin_password")
    private String telcomadminPassword;

    @Field("password_expdays")
    private String passwordExpdays;

    @Field("account_email_address")
    private String accountEmailAddress;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    @Field("inserted_date")
    private Date insertedDate;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    @Field("updated_date")
    private Date updatedDate;

    @Field("isActive")
    private Boolean isActive;

    public long get_id() {
        return _id;
    }

    public void set_id(long _id) {
        this._id = _id;
    }

    public String getXsiURI1() {
        return xsiURI1;
    }

    public void setXsiURI1(String xsiURI1) {
        this.xsiURI1 = xsiURI1;
    }

    public String getXsiURI2() {
        return xsiURI2;
    }

    public void setXsiURI2(String xsiURI2) {
        this.xsiURI2 = xsiURI2;
    }

    public String getOCI1() {
        return OCI1;
    }

    public void setOCI1(String oCI1) {
        OCI1 = oCI1;
    }

    public String getOCI2() {
        return OCI2;
    }

    public void setOCI2(String oCI2) {
        OCI2 = oCI2;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public String getConnectorType() {
        return connectorType;
    }

    public void setConnectorType(String connectorType) {
        this.connectorType = connectorType;
    }

    public String getTelcomadminUsername() {
        return telcomadminUsername;
    }

    public void setTelcomadminUsername(String telcomadminUsername) {
        this.telcomadminUsername = telcomadminUsername;
    }

    public String getTelcomadminPassword() {
        return telcomadminPassword;
    }

    public void setTelcomadminPassword(String telcomadminPassword) {
        this.telcomadminPassword = telcomadminPassword;
    }

    public String getPasswordExpdays() {
        return passwordExpdays;
    }

    public void setPasswordExpdays(String passwordExpdays) {
        this.passwordExpdays = passwordExpdays;
    }

    public String getAccountEmailAddress() {
        return accountEmailAddress;
    }

    public void setAccountEmailAddress(String accountEmailAddress) {
        this.accountEmailAddress = accountEmailAddress;
    }

    public Date getInsertedDate() {
        return insertedDate;
    }

    public void setInsertedDate(Date insertedDate) {
        this.insertedDate = insertedDate;
    }

    public Date getUpdatedDate() {
        return updatedDate;
    }

    public void setUpdatedDate(Date updatedDate) {
        this.updatedDate = updatedDate;
    }

    public Boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(Boolean isActive) {
        this.isActive = isActive;
    }
}

AccountsController.java

@RestController
@RequestMapping("/accounts")
@CrossOrigin("*")
public class AccountsController {
    @Autowired
    AccountsRepository accountsRepository;

    @Autowired
    SequenceRepository sequenceRepository;

    private static final String ACCOUNT_SEQ_KEY = "accountsequence";

@PostMapping("/create")
    public Account createAccount(@Valid @RequestBody Account account) {
        account.set_id(sequenceRepository.getNextSequenceId(ACCOUNT_SEQ_KEY));
        account.setIsActive(true);
        return accountsRepository.save(account);
    }

    @GetMapping(value = "/findByID/{id}")
    public ResponseEntity<Account> getAccountById(@PathVariable("id") String id) {
        Account account = accountsRepository.findOne(id);
        if (account == null) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        } else {
            return new ResponseEntity<>(account, HttpStatus.OK);
        }
    }
}

帐户存储库

public interface AccountsRepository {

    List<Account> findAll(Sort sortByCreatedAtDesc);

    Account save(Account account);

    Account findOne(String id);

    void delete(String id);

}

AccountsRepositoryIMPL

@Repository
public class AccountsRepositoryImpl implements AccountsRepository {
    DBOperations dbOperations = new DBOperations();

    @Override
    public List<Account> findAll(Sort sortByCreatedAtDesc) {
        Query q = new Query().with(new Sort(Sort.Direction.ASC, "inserted_date"));
        List<Account> accountList = dbOperations.getMongoOpertion().findAllAndRemove(q, Account.class);
        return accountList;
    }

    @Override
    public Account save(Account account) {
        try {
            dbOperations.getMongoOpertion().save(account);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return account;
    }

    @Override
    public Account fin**strong text**dOne(String id) {
        Account account = dbOperations.getMongoOpertion().findOne(Query.query(Criteria.where("_id").is(id)),
                Account.class, "account");
        return account;
    }

    @Override
    public void delete(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Account account = dbOperations.getMongoOpertion().findOne(query, Account.class);
        dbOperations.getMongoOpertion().remove(account);

    }

}

DBOperations.java

public class DBOperations {

    ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml");

    public MongoOperations getMongoOpertion() {
        MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");
        return mongoOperation;
    }

}

推荐答案

查看您的代码. 您已将_id声明为Long类型.

Look at your code. You have declared _id as Long type.

@Id
private long _id;

但是在下面的方法中,您要传递String id来匹配条件.

But in your below methods you are passing String id to match the criteria.

所以它不起作用.

@Override
        public Account findOne(String id) {
            Account account = dbOperations.getMongoOpertion().findOne(Query.query(Criteria.where("_id").is(id)),
                    Account.class, "account");
            return account;
        }

@Override
    public void delete(String id) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        Account account = dbOperations.getMongoOpertion().findOne(query, Account.class);
        dbOperations.getMongoOpertion().remove(account);

    }

这篇关于Spring Boot Mongodb通过ID搜索返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆