java - 由 : org. springframework.data.mapping.model.MappingException : No property territoryID found on com. common.model.EmployeeTerritory 引起! - Spring 启动

标签 java spring-mvc spring-boot

我正在开发 Spring Boot MongoDB 示例。在此示例中,我尝试通过 spring-data-mongo 存储库查询获取 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
}

EmployeeTerritoryRepository.java

public interface EmployeeTerritoryRepository extends CrudRepository<EmployeeTerritory, String>{
    EmployeeTerritory findByTerritoryID(Integer territoryID);
}

EmployeeTerritoryService.java

public interface EmployeeTerritoryService {
    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

数据库集合: enter image description here

最佳答案

仅用于澄清目的。我并不假装这是一个明确的答案。

也许你误解了我的意思。您必须遵守 Java Bean 命名约定。

@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
 }

我再说一遍,这可能是你异常(exception)的原因。

关于java - 由 : org. springframework.data.mapping.model.MappingException : No property territoryID found on com. common.model.EmployeeTerritory 引起! - Spring 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160919/

相关文章:

bash - Docker Alpine 以另一个用户身份执行命令

java - 连接表上没有主复合键的 JPA @ManyToMany 关系

java - 在 JMockit 中模拟被测类的私有(private)方法

java - 如何从 Freemarker 模板中的表单输入中获取数据到 spring MVC Controller 中?

java - 这个Service层是否违反了SRP原则

java - hibernate validator 不适用于 Spring MVC 应用程序

java - CrudRepository保存方法

java - 我在与输入颜色 channel 相关的 inRange 函数上遇到错误

java - 在 Groovy 中使用 JsonBuilder 序列化 java.nio.file.Path

java - Spring Boot 部署看不到 .class 文件