我遇到了一个问题,来自java的以下输出,hibernate尝试执行查询。
Caused by: org.postgresql.util.PSQLException: ERRORE: la funzione levenshtein_less_equal(text, character varying, integer) non esiste
Suggerimento: Nessuna funzione trovata con nome e tipi di argomenti forniti. Potrebbe essere necessario convertire i tipi esplicitamente.
Posizione: 464
对于意大利语的错误日志感到抱歉,基本上说这个函数不存在这种参数。我查看了DB上的函数,我有一个名为:
的函数levenshtein_less_equal(text, text, integer)
现在,首先我不理解为什么query.setparameter
在java上,它设置了带字符串的函数的第一个和第二个参数,最终会有这样的函数调用
levenshtein_less_equal(text, character varying, integer)
两者都是字符串,但一个映射到文本,一个映射到字符变化??
其次,我不会通过在数据库扩展中添加 fuzzystrmatch 扩展来理解为什么我解决了这个问题。
答案 0 :(得分:0)
levenshtein_less_equal(text, text, integer)
是一个比较postgres中两个字符串的函数,它是Fuzzymatch模块的一部分,它包含了获取字符串之间距离的函数,参见:fuzzystrmatch,其中一种方法是比较字符串被调用Levenshtein distance。
当您在Hibernate中执行setParameter()
时,间接触发字符串比较,我看不到您的数据但我认为您的数据有特殊字符,这里是一个链接到堆栈溢出问题,它解决了同样的问题:link。
所以这里基本上发生的事情是Postgres试图得到一个它不理解的字符串的近似值以获得匹配并且它使用Levenshtein距离来实现。