Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 原因:org.springframework.data.mapping.model.MappingException:在com.common.model.EmployeeTerritory上找不到属性territoryID!-弹簧靴_Java_Spring Mvc_Spring Boot - Fatal编程技术网

Java 原因:org.springframework.data.mapping.model.MappingException:在com.common.model.EmployeeTerritory上找不到属性territoryID!-弹簧靴

Java 原因:org.springframework.data.mapping.model.MappingException:在com.common.model.EmployeeTerritory上找不到属性territoryID!-弹簧靴,java,spring-mvc,spring-boot,Java,Spring Mvc,Spring Boot,我正在开发Spring Boot MongoDB示例。在本例中,我试图通过SpringDataMongo存储库查询获取TerritoryID,但遇到以下错误。请引导 Caused by: org.springframework.data.mapping.model.MappingException: No property territoryID found on com.common.model.EmployeeTerritory! at org.springframework.dat

我正在开发
Spring Boot MongoDB
示例。在本例中,我试图通过SpringDataMongo存储库查询获取TerritoryID,但遇到以下错误。请引导

Caused by: org.springframework.data.mapping.model.MappingException: No property territoryID found on com.common.model.EmployeeTerritory!
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:236) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:214) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:202) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:109) ~[spring-data-mongodb-1.6.3.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:55) ~[spring-data-mongodb-1.6.3.RELEASE.jar:na]
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.PartTreeMongoQuery.createQuery(PartTreeMongoQuery.java:75) ~[spring-data-mongodb-1.6.3.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:86) ~[spring-data-mongodb-1.6.3.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:415) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:393) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$DefaultMethodInvokingMethodInterceptor.invoke(RepositoryFactorySupport.java:506) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
    at com.sun.proxy.$Proxy35.findByTerritoryID(Unknown Source) ~[na:na]
    at com.common.service.EmployeeTerritoryServiceImpl.findByTerritoryID(EmployeeTerritoryServiceImpl.java:18) ~[classes/:na]
    at com.common.main.MainController.run(MainController.java:51) ~[classes/:na]
    at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:672) [spring-boot-1.2.5.RELEASE.jar:1.2.5.RELEASE]
    ... 5 common frames omitted
16-03-22 22:33:38 [main] INFO  o.s.c.a.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@576d5deb: startup date [Tue Mar 22 22:33:26 IST 2016]; root of context hierarchy
16-03-22 22:33:38 [main] INFO  o.s.j.e.a.AnnotationMBeanExporter - Unregistering JMX-exposed beans on shutdown
Exception in thread "main" java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:675)
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:690)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
    at com.common.main.Main.main(Main.java:17)
我开发的代码: EmployeeTerritory.java

@Document(collection="employee-territories")
public class EmployeeTerritory {

    @Id
    private ObjectId id;
    @Field
    private String EmployeeID;
    @Field(value="TerritoryID")
    private Integer TerritoryID;
    // setters and getters
}
public interface EmployeeTerritoryRepository extends CrudRepository<EmployeeTerritory, String>{
    EmployeeTerritory findByTerritoryID(Integer territoryID);
}
EmployeeTerritoryRepository.java

@Document(collection="employee-territories")
public class EmployeeTerritory {

    @Id
    private ObjectId id;
    @Field
    private String EmployeeID;
    @Field(value="TerritoryID")
    private Integer TerritoryID;
    // setters and getters
}
public interface EmployeeTerritoryRepository extends CrudRepository<EmployeeTerritory, String>{
    EmployeeTerritory findByTerritoryID(Integer territoryID);
}
EmployeeTerritoryServiceImpl.java

@Component
public class EmployeeTerritoryServiceImpl implements EmployeeTerritoryService{

    @Autowired
    private EmployeeTerritoryRepository employeeTerritoryRepository;


    @Override
    public EmployeeTerritory findByTerritoryID(Integer territoryID) {
        EmployeeTerritory et = employeeTerritoryRepository.findByTerritoryID(territoryID);
        return et;
    }
}
MainController.java

@Controller
public class MainController implements CommandLineRunner {
    private Logger LOGGER = Logger.getLogger(MainController.class);

    @Autowired
    private EmployeeTerritoryService etService;

    @Override
    public void run(String... args) throws Exception {
        LOGGER.info("~~ STARTED ~~");
        // Find employee-territories
        EmployeeTerritory et = etService.findByTerritoryID(19713);
        LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~");
        LOGGER.info("EmployeeID    : "+et.getEmployeeID());
        LOGGER.info("TerritoryID   : "+et.getTerritoryID());
    }
}
Main.java

@Configuration
@EnableAutoConfiguration
@EnableMongoRepositories("com.common.repository")
@ComponentScan({"com.common.main", "com.common.service"})
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}
应用程序属性

# MONGODB Config
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.uri=mongodb://localhost/boot
spring.data.mongodb.repositories.enabled=true

logging.level.com.altruista.guidingsigns=INFO
logging.level.org.springframework=INFO
数据库集合:
仅用于澄清目的。我并不认为这是一个明确的答案

也许你误解了我。您必须遵守bean的java命名约定

@Document(collection="employee-territories")
    public class EmployeeTerritory {

    @Id
    private ObjectId id;
    @Field
    private String EmployeeID;
    @Field(value="TerritoryID")
    private Integer TerritoryID;
    // setters and getters
 }
应该是

 @Document(collection="employee-territories")
 public class EmployeeTerritory {

     @Id
     private ObjectId id;
     @Field
     private String employeeID;
     @Field(value="TerritoryID")
     private Integer territoryID;
     // setters and getters
 }

我重复一遍,这可能是您出现异常的原因。

我能够解决此错误。请参阅下面我的代码片段。根据spring data mongo文件(参考第12.1.1节):

您的Mongo DB字段使用驼峰大小写字母及其各自的setter和getter,但根据doc“标识符的默认字段名为'\u id',可以通过
@field
注释进行自定义。”

如果您愿意通过任何字段获取数据,则需要对所有字段应用类似的逻辑

使用下面的,将工作

@Document(collection="employee-territories")
public class EmployeeTerritory {

    @Id
    private ObjectId id;
    @Field("EmployeeID")
    private Integer employeeID;
    @Field("TerritoryID")
    private Integer territoryID;

    public ObjectId getId() {
        return id;
    }
    public void setId(ObjectId id) {
        this.id = id;
    }
    public Integer getEmployeeID() {
        return employeeID;
    }
    public void setEmployeeID(Integer employeeID) {
        this.employeeID = employeeID;
    }
    public Integer getTerritoryID() {
        return territoryID;
    }
    public void setTerritoryID(Integer territoryID) {
        this.territoryID = territoryID;
    }
}

您是否尝试过将类中的字段命名为“territoryId”?这不是一个愚蠢的问题。使用
territoryId
并添加getter/setter(spring可能会使用它们)。对spring进行一些调试可能有助于out@RC. 奇怪的是,我们的建议最终被接受为正确答案,不是吗?@RubioRic你应该习惯它;)(如果你真的“不喜欢”,你可以否决这个答案)@javaHelper,这很奇怪。异常似乎是指模型org.springframework.data.mapping.model.MappingException。模型映射。我不相信你的评论。有人否决了我的澄清?谢谢你的回答:)什么???但这就是我45分钟前在评论中提出的解决方案!javatechnology和javaHelper都鄙视它。00