public class MyOracleDialect extends Oracle12cDialect
{
public MyOracleDialect()
{
super();
registerFunction( "levenshtein", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "UTL_MATCH.EDIT_DISTANCE(?1,?2)" ) );
}
}
扩展的postgresql方言:
public class MyPostgreSQLDialect extends PostgreSQL95Dialect
{
public MyPostgreSQLDialect()
{
super();
registerFunction( "levenshtein", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "levenshtein(?1, ?2)"));
}
}
现在你可以用 levenshtein hql中的函数。
List<Integer> result = session.createQuery(
"select levenshtein(word1, word2) from TestEntity",
Integer.class
).getResultList();
org.postgresql.util.PSQLException: ERROR: function levenshtein(character varying, character varying) does not exist. No function matches the given name and argument types. You might need to add explicit type casts.
1条答案
按热度按时间4ngedf3f1#
您可以尝试用hibernate方言封装不同数据库中levenshtein函数名之间的差异。下面我将为oracle和postgresql提供一个示例(我没有使用mssql)
扩展的oracle方言:
扩展的postgresql方言:
现在你可以用
levenshtein
hql中的函数。p、 对于postgresql,我遇到了以下问题:如果扩展
fuzzystrmatch
已为特定架构安装TEST_SCHEMA
:然后应在连接url中指定此架构:
否则会出现异常: