spring - 为什么我用Spring Data MongoDB得到 "No property node found on entity class … to bind constructor parameter to!"

标签 spring spring-data spring-data-mongodb

尝试在Spring Data MongoDB和Spring 4中使用JodaTime的LocalDate,但出现以下异常:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.model.MappingException: No property node found on entity class com.th.model.Price to bind constructor parameter to!] with root cause
org.springframework.data.mapping.model.MappingException: No property node found on entity class com.th.model.Price to bind constructor parameter to!
    at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74)
    at org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63)
    at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:249)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:230)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:190)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:186)
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:77)
    at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:2121)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1805)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1628)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1611)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:535)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:526)
    at com.th.model.Company.getPrices(Company.java:255)
    at com.th.controller.Home.getPrices(Home.java:32)
    …

这是我的配置:
<mongo:db-factory id="mongoDbFactory" dbname="th" host="localhost"/>

<mongo:mapping-converter id="mappingConverter">
    <mongo:custom-converters>
    <mongo:converter>
        <bean class="com.th.tool.MongoDBConverters.DateToLocalDateConverter"/>
    </mongo:converter>
    <mongo:converter>
        <bean class="com.th.tool.MongoDBConverters.LocalDateToDateConverter"/>
    </mongo:converter>
    </mongo:custom-converters>
</mongo:mapping-converter>


<bean class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="mappingConverter"/>
</bean>
public class MongoDBConverters {

    public static class DateToLocalDateConverter implements Converter<Date, LocalDate> {

        @Override
        public LocalDate convert(Date source) {
            return source == null ? null : LocalDate.fromDateFields(source);
        }
    }

    public static class LocalDateToDateConverter implements Converter<LocalDate, Date> {

        @Override
        public Date convert(LocalDate source) {
            return source == null ? null : source.toDate();
        }
    }
}

最佳答案

显然我不能有这样的构造函数:

public Price(String companyId, JsonNode node) {
        this.companyId = companyId;

        if(node != null) {
            this.date = Tools.getLocalDate(node.get("Date").getTextValue());
            this.closePrice = Double.parseDouble(node.get("Close").getTextValue());
            this.volume = Double.parseDouble(node.get("Volume").getTextValue());
        }
}

具有直接任务的普通人:
public Price(String companyId, LocalDate date, double closePrice, double volume) {
    this.companyId = companyId;
    this.date = date;
    this.closePrice = closePrice;
    this.volume = volume;
}

关于spring - 为什么我用Spring Data MongoDB得到 "No property node found on entity class … to bind constructor parameter to!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778195/

相关文章:

java - 如何使用java在mysql的枚举类型列中插入两个以上的值?

Spring Boot 错误 : Error creating bean with name

spring - 如何将 mongoTemplate 自动连接到自定义类型转换器?

java - Mongodb 无法持久化事务状态,因为 session 事务集合丢失

java - Advice是不是从struts 2 action中调用的?

spring - Webflux Spring 2.1.2 自定义Content-Type

spring - 使用Spring数据Elasticsearch存储库搜索进行别名并保持冲突

spring-boot - 如何让spring data mongodb在每个测试方法之前执行createIndexes?

java - 无法在java中使用两个调用函数

mysql - JPA/Hibernate 查询执行时间太长