当前位置: 首页 > 知识库问答 >
问题:

Spring数据Mongodb NoSuchMethodError写入数据库时出错

田意致
2023-03-14

我正在使用mongodb构建一个SpringWebApp,但最近我开始在写DB时遇到问题。下面是我得到的堆栈跟踪。

SEVERE: Servlet.service() for servlet [DispatcherServlet] in context with path [/afcrowther_blog]     threw exception [Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.mapping.MongoPersistentProperty.isWritable()Z] with root cause
java.lang.NoSuchMethodError:     org.springframework.data.mongodb.core.mapping.MongoPersistentProperty.isWritable()Z
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:415)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:412)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:294)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:412)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:386)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:350)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:77)
at org.springframework.data.mongodb.core.MongoTemplate.toDbObject(MongoTemplate.java:732)
at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:714)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:672)
at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:663)

阅读之后,最常见的原因似乎是依赖项不匹配,但我不确定在这种情况下,哪些依赖项实际上是相互兼容的。

波姆。xml

    <spring.version>4.0.7.RELEASE</spring.version>
    <jackson.version>1.9.2</jackson.version>
    <spring.security.version>3.2.5.RELEASE</spring.security.version>

</properties>

<dependencies>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>2.12.3</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.6.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>1.9.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.1.2</version>
    </dependency>

    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${spring.security.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${spring.security.version}</version>
    </dependency>

</dependencies>

<repositories>
    <repository>
        <id>spring-libs-snapshot</id>
        <name>Spring Snapshot Repository</name>
        <url>http://repo.spring.io/libs-snapshot</url>
    </repository>
</repositories>

<build>

    <finalName>afcrowther blog</finalName>

    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>true</downloadJavadocs>
            </configuration>
        </plugin>
    </plugins>

</build>

这些主要是最新的发布版本,尽管我将Spring框架更改为4.0.7。发布尝试并修复它,但我也使用了4.1.0。释放并发生相同的异常。

谢啦

EDIT:@Document注释类引发错误,角色设置为字符串,直到此问题得到解决

@Document(collection = "user")
public class UserModel{

@PersistenceConstructor
public UserModel(String id, String firstName, String surname, String email,
        String password, String role) {
    this.id = id;
    this.firstName = firstName;
    this.surname = surname;
    this.email = email;
    this.password = password;
    this.role = role;
}

public UserModel(){

}

@Id
private String id;

@Field("firstName")
@Indexed
private String firstName;

@Field("surname")
private String surname;

@Field("email")
@Indexed(unique = true)
private String email;

@Field("password")
private String password;

@Field("role")
private String role;

public String getId() {
    return id;
}

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

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getSurname() {
    return surname;
}

public void setSurname(String surname) {
    this.surname = surname;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPassword() {
    return password;
}

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

public String getRole(){
    return role;
}

public void setRole(String role){
    this.role = role;
}
}

共有1个答案

丁恩
2023-03-14

更新问题,在更改为spring bom和spring数据bom依赖关系管理后,问题仍然存在。

但是,从第一个构造函数中删除“@PersistenceConstructor”标记,然后切换构造函数的顺序,解决了这个问题。因此,从外观上看,默认构造函数必须是文件中的第一个构造函数。不知道为什么,但你来了!

 类似资料:
  • 我忙于一项学校作业,我有一个由三个表组成的基本access数据库。Book、Reader和BookRated,其中as BookRated是交集表,主键userName来自Reader和ISBN来自Book组成BookRated的复合主键(作为外键)。 我正试图将信息插入书签表中,但出现以下错误

  • 我使用Spring-Boot、spring-data/jpa和Hazelcast客户机/服务器拓扑。在我的测试应用程序的某些部分中,我在客户端(服务器是与关系数据库交互的服务器)执行CRUD操作时计算时间。我通过将write-delay-seconds设置为10,将映射(存储)配置为write-behind。 Spring-Data的save()返回持久化的实体。因此,在客户端应用程序中,应用程序

  • 这是我的代码: 有人能知道这段代码中的错误是什么,请修复它。

  • 我正在尝试从我创建的一个简单的联系人表单中插入数据。我正在使用phpMyAdmin 下面是PHP(出于安全考虑,我删除了define语句,但我可以毫无问题地建立到数据库的链接。) 当有人点击论坛上的submit按钮后,代码就会运行,据我所知,这是正常工作的。 该错误发生在php代码的末尾。正在输出“SLQ Insert Statement FAILD”,但未发布mysql错误。 我的数据库/表的设

  • 问题内容: 我刚刚建立了一个到目前为止仍然非常少的项目maven / jpa / hibernate项目,在这里我试图持久化一个对象。 我的课很简单: 我的persistence.xml也是非常基本的: 最后,这是我用来保留对象的代码: 现在,我希望在这里发生两件事:首先,我希望创建Person表(由于hibernate.hbm2ddl.auto = update)。这已经发生过一次,并且正确写出

  • 我将多个文本字段绑定到IDE Rapidclipse中的一个实体,该实体使用Vaadin14和JPA/Hibernate。其目的是将按钮点击时的输入数据写入定义为DataSource的引用数据库中。我已经发现这个文档是手动编写的。所以我对此的理解是这样的:首先,我需要创建一个实体的新bean()。那么所有输入数据都应该分配给bean()的属性。文档就这么多了。但是数据是如何插入到数据库中实体的表中