0

Metin Arama için Spring + Mongo Data JPA örnek geliştiriyorum. OrderID 102 kullanarak arama yapmaya çalıştığımda. OrderID içinde bu kayıt 102 içeren tüm kayıtları DB'den getirilecek bekliyordum. Lütfen bana aşağıdaki hatanın geldiğini görmeme yardım edin.Geçersiz parametre dizini! Çok az sorgu metodu parametresi beyan ettiniz! - Bahar Mongo TextSearch

org.springframework.data.repository.query.ParameterOutOfBoundsException: Invalid parameter index! You seem to have declare too little query method parameters! 
    at org.springframework.data.repository.query.Parameters.getParameter(Parameters.java:178) 
    at org.springframework.data.repository.query.Parameters.getBindableParameter(Parameters.java:248) 
    at org.springframework.data.repository.query.ParametersParameterAccessor.getBindableValue(ParametersParameterAccessor.java:107) 
    at org.springframework.data.repository.query.ParametersParameterAccessor$BindableParameterIterator.next(ParametersParameterAccessor.java:165) 
    at org.springframework.data.mongodb.repository.query.ConvertingParameterAccessor$ConvertingIterator.next(ConvertingParameterAccessor.java:176) 
    at org.springframework.data.mongodb.repository.query.ConvertingParameterAccessor$ConvertingIterator.nextConverted(ConvertingParameterAccessor.java:185) 
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.from(MongoQueryCreator.java:244) 
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:114) 
    at org.springframework.data.mongodb.repository.query.MongoQueryCreator.create(MongoQueryCreator.java:58) 
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109) 
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88) 
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73) 
    at org.springframework.data.mongodb.repository.query.PartTreeMongoQuery.createQuery(PartTreeMongoQuery.java:76) 
    at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:85) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:462) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:440) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
    at com.sun.proxy.$Proxy22.findByOrderId(Unknown Source) 
    at com.common.index.OrderTest.testOrderSearch(OrderTest.java:29) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:70) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:224) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
    at java.util.ArrayList.get(ArrayList.java:429) 
    at org.springframework.data.repository.query.Parameters.getParameter(Parameters.java:176) 
    ... 52 more 

kod ı geliştirdi: Order.java

@Document(collection="orders") 
public class Order { 

    @Id 
    private ObjectId id; 

    @Field("OrderID") 
    private Integer orderId; 

    @Field("CustomerID") 
    private String customerId; 

    @Field("EmployeeID") 
    private Integer employeeId; 

    @Field("OrderDate") 
    private String orderDate; 

    @Field("RequiredDate") 
    private String requiredDate; 

    @Field("ShippedDate") 
    private String shippedDate; 

    @Field("ShipVia") 
    private Integer shipVia; 

    @Field("Freight") 
    private Double freight; 

    @Field("ShipName") 
    private String shipName; 

    @Field("ShipAddress") 
    private Integer shipAddress; 

    @Field("ShipCity") 
    private String shipCity; 

    @Field("ShipRegion") 
    private String shipRegion; 

    @Field("ShipPostalCode") 
    private String shipPostalCode; 

    @Field("ShipCountry") 
    private Integer shipCountry; 

    @Field("field14") 
    private String field14; 

     // setters and getters 
} 

OrderRepository.java

public interface OrderRepository extends CrudRepository<Order, Integer>{ 
    List<Order> findByOrderId(TextCriteria criteria); 
} 

Bu mongodb içinde Index oluşturmaktır:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:application-config.xml"}) 
public class IndexToolTest { 

    @Autowired 
    private MongoTemplate mongoTemplate; 

    @Test 
    public void testCreateIndex() { 
     mongoTemplate.indexOps(Order.class).ensureIndex(new TextIndexDefinitionBuilder() 
     .onField("OrderID").build()); 
    } 
} 

OrderTest. java

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:application-config.xml"}) 
public class OrderTest { 
    private static final Logger LOGGER = LoggerFactory.getLogger(OrderTest.class); 

    @Autowired 
    private OrderRepository orderRepository; 

    @Test 
    public void testOrderSearch() { 
     TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny("102"); 
     List<Order> orders = orderRepository.findByOrderId(criteria); 
     System.out.println("Size : "+orders.size()); 
    } 
} 

uygulama config.xml tüm yeterli bilgi sağladık

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
      xmlns:mvc="http://www.springframework.org/schema/mvc" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/data/mongo 
    http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"> 

    <context:annotation-config/> 
    <mvc:annotation-driven/> 

    <beans:bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <beans:property name="locations"> 
      <beans:list> 
       <beans:value>classpath:database.properties</beans:value> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

    <context:component-scan base-package="com.common.model"/> 

    <!-- Default bean name is 'mongo' --> 
    <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}"/> 

    <mongo:repositories base-package="com.common.repository"/> 

    <beans:bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <beans:constructor-arg ref="mongo"/> 
     <beans:constructor-arg name="databaseName" value="${mongo.database.name}"/> 
    </beans:bean> 

    <beans:bean id="orderService" class="com.common.Service.OrderServiceImpl" /> 

</beans:beans> 

. Şimdi yardım edin. enter image description here

cevap

0

yöntem List<Order> findByOrderId(TextCriteria criteria); alan tipi ve sorgu metodun, hem mevcut olan orderId için gerekli bağımsız değişken eksik. TextCriteria bağımsız değişkeni, yöntem bildiriminin bağımsız değişkenlerinden herhangi birine eşlenmeyecek özel bir dizedir.

OrderBy sorgusu ile ilgili yorumunuzu bırakarak criteria numaralı telefonu kullanabilirsiniz.

List<Order> findAllBy(TextCriteria criteria); 
+0

Merhaba Chris - Sadece String olan değerleri araştırabiliyorum, ancak herhangi bir tamsayı değerini arayamıyorum. Niye ya? Tamsayı değerleri kullanarak nasıl arama yapabiliriz? Mantığını uygulamaya çalışacağım. –

+0

10210, 10211, 10213 vb. Ile başlayan OrderId içeren tüm belgeleri almak mümkün mü? – Prateek