2016-07-19 4 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

Я сменил тип на длинный, и он сработал. Я попытался перейти от String к длинному в более раннем тесте, но я думаю, может быть, у меня было $ numberLong, указанное в запросе json, когда это не было необходимо. Хотя он показывает NumberLong в консоли Mongo для моего поля даты, это, наконец, сработало для запроса. Обратите внимание, что я также добавил аннотацию @Repository в начало моего интерфейса:

@Query(value = "{MyData.fromDatestamp : { $gte: ?0 } }") 
List<MyData> findMyData(long fromDatestamp); 
Смежные вопросы