2016-07-19 126 views
0

我使用Spring/MongoDB @Query注释,如下所示,使用@EnableMongoRepositories指定,但String参数替换会导致解析/数字格式异常。当我为了调试目的而硬编码字符串日期时,它可以工作。我是否错过了一个依赖关系或其他东西来实现这个工作。以下是有关章节:Spring MongoDB @Query参数?0不被替换

这工作:

@Query("{'MyData.fromDatestamp' : { $gte: { $numberLong: \"20130801000000\" } }}") 
List<MyData> findMyData(); 

这不:

@Query("{'MyData.fromDatestamp' : { $gte: { $numberLong: ?0 } }}") 
List<MyData> findMyData(String fromDatestamp); 

错误:

java.lang.NumberFormatException: For input string: "_param_0" 

这里是我的依赖关系:

dependencies { 
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE") 
} 

...

compile("org.springframework.boot:spring-boot-starter-web") { 
    exclude module: "spring-boot-starter-tomcat" 
} 
compile("org.springframework.boot:spring-boot-starter-jetty") 
compile("org.springframework.data:spring-data-mongodb") 
compile("org.mongodb:mongo-java-driver:3.2.2") 
compile("com.fasterxml.jackson.core:jackson-core:2.8.0") 
compile("com.fasterxml.jackson.core:jackson-annotations:2.8.0") 

这里是我的配置:

@Configuration public class MongoConfig extends AbstractMongoConfiguration { 
@Override 
protected String getDatabaseName() { 
    return databaseName; 
} 

@Bean 
public MongoClient mongoClient() throws Exception { 
    return new MongoClient(dataStoreHost,dataStorePort); 
} 

@Override 
public Mongo mongo() throws Exception { 
    return mongoClient(); 
} 

@Bean 
public MongoDbFactory mongoDbFactory() throws Exception { 
    return new SimpleMongoDbFactory(mongoClient(), databaseName); 
} 

@Override 
@Bean 
public MongoTemplate mongoTemplate() throws Exception { 
    return new MongoTemplate(mongoDbFactory()); 
} 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

}

另外,我还尝试了这些变化,这会失败,JSONParseException:

@Query("{'MyData..fromDatestamp' : { $gte: { $numberLong: \"?0\" } }}") 

@Query("{'MyData..fromDatestamp' : { $gte: { $numberLong: '?0' } }}") 

提前感谢任何见解或想法!

回答

0

我将类型改为long,并且工作。我曾尝试在较早的测试中将字符串更改为long,但我认为可能在查询json中指定了$ numberLong时不需要它。尽管它在Mongo控制台中显示了我的日期字段的NumberLong,但这最终对查询起作用。请注意,我还在界面顶部添加了@Repository注释:

@Query(value = "{MyData.fromDatestamp : { $gte: ?0 } }") 
List<MyData> findMyData(long fromDatestamp);