2016-03-22 16 views
0

Spring Boot MongoDB örneğini geliştiriyorum. Bu örnekte, spring-data-mongo deposu sorgusuyla TerritoryID'yi almaya çalışıyorum ve aşağıdaki hataya bakıyorum. EmployeeTerritory.javaNedeniyle: org.springframework.data.mapping.model.MappingException: com.common.model.EmployeeTerritory üzerinde hiçbir özellik territoryID bulunamadı! - İlkbahar Çizme

@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); 
} 
:

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.spring[email protected]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) 

Ben geliştirilen kod rehberlik edin

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); 
    } 
} 

application.properties

# 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 

DB Koleksiyonu: enter image description here

+1

"TerritoryId" sınıfındaki alanı adlandırmayı denediniz mi? Bu aptalca bir soru değil. – RubioRic

+0

'territoryId' işlevini kullanın ve getter/setters ekleyin (spring bunları kullanabilir) –

+0

İlkbaharda bazı hata ayıklama işlemleri –

cevap

0

Bu hataları çözdüm. Lütfen aşağıdaki kod snippet'ime bakın. Yayınlanan veriler mongo docs başı olarak (Bkz. Bölüm 12.1.1): http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/

Mongo DB alanlarınız deve harflerini ve ilgili ayarlayıcı ve alıcıları kullanıyor, ancak dokümanlardaki gibi "Tanımlayıcılar için varsayılan alan adı" _id "dir. ve @Field ek açıklaması yoluyla özelleştirilebilir. "

For Ex: @Field('x') String id 


Resulting Id-Fieldname in MongoDB ==> x, 

Benzer mantık size herhangi bir alan (lar) tarafından veri almak çekinmiyorsanız tüm alanı için uygulamak gerekir.

Aşağıdakileri kullanın ve çalışacaktır.

@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; 
    } 
} 
+0

Ne ??? Ama bu 45 dakika önce yorumlarda önerdiğim çözüm! Hem javatechnology hem de javaHelper onu hor gördü. 00 – RubioRic

2

Sadece açıklama amacıyla. Bunun kesin bir cevap olduğunu iddia etmiyorum. Belki beni yanlış anladınız demektir. Fasulye için java adlandırma kurallarına saygı göstermelisiniz.

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

O may, tekrar ediyorum, bu istisna sebebi olabilir olmalıdır.

+0

@javaHelper Bu garip. İstisna, org.springframework.data.mapping.model.MappingException modeline başvurmakta gibi görünüyor. Modeli. Haritalama. Yorumunuzu istemiyorum. Birisi benim açıklamamı reddetti. : -? – RubioRic

+0

Cevabınız için teşekkürler :) – vinodh

+0

@vinodh Rica ederim :-) – RubioRic

İlgili konular