缺少fuzzystringmatch扩展名pg admin

时间:2017-11-15 08:49:45

标签: hibernate hql

我遇到了一个问题,来自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 扩展来理解为什么我解决了这个问题

1 个答案:

答案 0 :(得分:0)

levenshtein_less_equal(text, text, integer)是一个比较postgres中两个字符串的函数,它是Fuzzymatch模块的一部分,它包含了获取字符串之间距离的函数,参见:fuzzystrmatch,其中一种方法是比较字符串被调用Levenshtein distance

当您在Hibernate中执行setParameter()时,间接触发字符串比较,我看不到您的数据但我认为您的数据有特殊字符,这里是一个链接到堆栈溢出问题,它解决了同样的问题:link

所以这里基本上发生的事情是Postgres试图得到一个它不理解的字符串的近似值以获得匹配并且它使用Levenshtein距离来实现。