Я хочу передать имя методу и добавить в него знаки процента внутри запроса.
Если запрос равен @Query("...file_name LIKE $1 ...")
, а я передаю %dogNames%
, он работает отлично. Но каким должен быть запрос, чтобы я мог передать dogNames
(нет %
), и он работает точно так же?
Я могу сделать это с findByFileNameContains()
. Запрос для findByFileNameContains()
автоматически сгенерирован для меня и работает так, что я могу передать строку типа "dogNames.txt", и он будет возвращать файлы с именами типа "/bin/dogNames.txt.9348393.tgz" и " /bigdogNames.txt». Поэтому он написал для меня что-то вроде этого: @Query ("#{#n1ql.selectEntity} WHERE file_name LIKE %$1% ")
Знаки процента включены в запрос, и я просто передаю строку, которую я хочу, чтобы имя файла содержало.
Как написать сам запрос, который выполняет так же? Я пробовал то, что показано для findByFileNamePatternAndFileDirectory()
, и получаю эту ошибку:
{"msg":"syntax error - at %!(NOVERB)","code":3000}
Класс DAO:
import com.mystuff.File;
import java.util.List;
import org.springframework.data.couchbase.core.query.Query;
import org.springframework.data.couchbase.repository.CouchbasePagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FileDao
extends CouchbasePagingAndSortingRepository<File, String> {
List<File> findByFileNameContains(String fileName);
@Query(
"#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND file_name LIKE %$1% AND file_dir = $2")
List<File> findByFileNamePatternAndFileDirectory(
String fileName, String fileDir);
}
Более полные журналы ошибок:
{"msg":"syntax error - at %!(NOVERB)","code":3000}
at org.springframework.data.couchbase.core.CouchbaseTemplate.findByN1QL(CouchbaseTemplate.java:470)
at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeCollection(AbstractN1qlBasedQuery.java:157)
at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeDependingOnType(AbstractN1qlBasedQuery.java:132)
at org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.execute(AbstractN1qlBasedQuery.java:107)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.data.couchbase.repository.support.ViewPostProcessor$ViewInterceptor.invoke(ViewPostProcessor.java:87)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)