java - MongoOperations 保存功能无法正常工作

标签 java mongodb spring-data-mongodb

我正在使用 Sprind Data MongoDb、MongoTemplate 和 MongoOperations 将数据保存到 MongoDB 中。 一切工作正常,没有错误或异常,但数据仍然没有插入到数据库中。我正在使用 MongoOperations 的 save 方法来保存数据。

这是我的 pom.xml 的相关部分

            <properties>
                <spring.version>4.2.8.RELEASE</spring.version>
                <springsecurity.version>3.2.0.RELEASE</springsecurity.version>
                <log4j.version>1.2.17</log4j.version>
                <commons.fileupload.version>1.3.1</commons.fileupload.version>
                <commons.io.version>2.4</commons.io.version>
                <springsocial.version>1.1.0.RELEASE</springsocial.version> 
            </properties>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-mongodb</artifactId>
                <version>1.9.4.RELEASE</version>
            </dependency>

这是我的 DBOPerations 类

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import com.bng.monitor.config.MongoConfig;
import com.bng.monitor.model.User;
//import org.springframework.context.support.GenericXmlApplicationContext;

public class DbOperations {

    public static void main(String[] args) {

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

    // For Annotation
    ApplicationContext ctx =
             new AnnotationConfigApplicationContext(MongoConfig.class);
    MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");

    User user = new User("kv", "password123");

    // save
    mongoOperation.save(user);

    // now user object got the created id.
    System.out.println("1. user : " + user);

    // query to search user
    Query searchUserQuery = new Query(Criteria.where("username").is("kv"));

    // find the saved user again.
    User savedUser = mongoOperation.findOne(searchUserQuery, User.class);
    System.out.println("2. find - savedUser : " + savedUser);

    // update password
    mongoOperation.updateFirst(searchUserQuery,
                         Update.update("password", "new password"),User.class);

    // find the updated user object
    User updatedUser = mongoOperation.findOne(searchUserQuery, User.class);

    System.out.println("3. updatedUser : " + updatedUser);

    // delete
    mongoOperation.remove(searchUserQuery, User.class);

    // List, it should be empty now.
    List<User> listUser = mongoOperation.findAll(User.class);
    System.out.println("4. Number of user = " + listUser.size());

    }

}

这是我的模型类

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {

    @Id
    private String id;

    private String username;

    private String password;

    public User(String username, String password){
        super();
        this.username = username;
        this.password = password;
    }

    public void setId(String id){
        this.id = id;
    }

    public String getId(){
        return this.id;
    }

    public void setUsername(String username){
        this.username = username;
    }

    public String getUsername(){
        return this.username;
    }

    public void sePassword(String password){
        this.password = password;
    }

    public String gePassword(){
        return this.password;
    }
}

这是我运行 DBOperations 类时的输出

367 [main] INFO org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5d6f64b1: startup date [Thu Nov 17 16:41:10 IST 2016]; root of context hierarchy Collections exists? : false 1. user : com.bng.monitor.model.User@342c38f8 2. find - savedUser : null 3. updatedUser : null 4. Number of user = 0

谁能告诉我这里出了什么问题吗?

最佳答案

问题出在 User.java 上。

  1. 实体类的构造函数需要使用@PersistenceConstructor注解。

@PersistenceConstructor is used to mark the constructor which is to be used for creating entities when fetching data from the Mongo Server.

  • User.java 中指定的集合名称错误:
  • @Document(collection = "users")

    因此,当我将集合名称更改为“user”时,一切正常。

    @Document(collection = "user")
    

    关于java - MongoOperations 保存功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653959/

    相关文章:

    node.js - NodeJS + MongoDB : find() where { 'value' : < 5 AND >1} - how?

    MongoDB 查询嵌套文档列表

    spring - 如何使用 Spring Data 和 MongoDB 更新对象?

    mongodb - 在 Spring 数据的 RepositoryRestResource 中急切加载 MongoDB @DBRef

    java - Swing JTable : Event when row is visible, 或滚动到底部时?

    java - 如何在 Amazon EC2 上安装 java runtime jre

    java - 更改 Java 小程序的外观

    java - 抓取 HTML 表格数据

    java - 强制 Spring Data MongoDB 将所有日期读取为 Joda DateTime 类型

    java - Spring Data Mongodb - 用于收集不同类型的存储库