gpt4 book ai didi

java - 如何在自定义 Spring Boot N1QL 查询中使用百分号和 LIKE 来与 Couchbase DB 一起使用

转载 作者:行者123 更新时间:2023-12-01 17:04:50 25 4
gpt4 key购买 nike

我想向该方法传递一个名称,并让它在查询中为我添加百分号。

如果查询是@Query("...file_name LIKE $1 ...")并且我传入%dogNames%,它就可以完美工作。但是,我要传入 dogNames(没有 %'s)的查询必须是什么,并且它的工作原理完全相同?

我可以使用 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)

最佳答案

LIKE 只能对字符串进行。 LIKE 的右侧必须用引号引起来。如果是查询参数则可能没有优化

使用类似这样的东西

文件名类似于“xyz%”

关于java - 如何在自定义 Spring Boot N1QL 查询中使用百分号和 LIKE 来与 Couchbase DB 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61471906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com