如何使用Postgresql';s包含在(@>;)中,而在hibernate中包含(<;@)?

如何使用Postgresql';s包含在(@>;)中,而在hibernate中包含(<;@)?,postgresql,hibernate,Postgresql,Hibernate,我正在尝试使用hibernate将提供的数组与Postgresql中文本[]列的值进行比较。 这似乎有点棘手 到目前为止,我所尝试的: 冬眠方言 我试图用postgres方言注册一个函数: registerFunction("array_in_array", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "?1 @> ?2")); 然后尝试按如下方式编写查询: from MyTable mt where (array_in_arr

我正在尝试使用hibernate将提供的数组与Postgresql中文本[]列的值进行比较。 这似乎有点棘手

到目前为止,我所尝试的: 冬眠方言 我试图用postgres方言注册一个函数:

registerFunction("array_in_array", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN, "?1 @> ?2"));
然后尝试按如下方式编写查询:

from MyTable mt where (array_in_array(:arr, mt.arr)) = true
当执行提供字符串[]参数的查询时,我得到以下错误:

org.postgresql.util.psqleexception:错误:运算符不存在:bytea@>text[]

提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换

当执行提供列表参数的查询时,我得到以下错误:

org.postgresql.util.PSQLException:错误:运算符不存在:字符变化@>字符变化

提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换

它建议使用显式类型转换,所以我这样做了。导致以下错误:

带字符串[]

org.postgresql.util.psqleexception:错误:无法将type bytea强制转换为text[]

并附上名单:

org.hibernate.dial.function.templaterender HHH000174:函数模板预期有1个参数,但遇到2个参数 org.postgresql.util.PSQLException:列索引超出范围:2,列数:1

还尝试使用本机查询。导致相同的错误


有什么想法吗?

您是否能够在hybernate之外执行此函数/查询?根据提供的错误,错误似乎发生在较低的级别。是的,我可以以本机方式运行它而不会出现问题。hibernate似乎没有将列表或数组转换为正确的文本[]类型。他将列表转换为单独的文本参数,并将数组转换为bytea。这并不少见,例如,当通过jdbc执行查询时,与文本之间的日期转换不会自动发生,但在psql中工作良好。您可以通过显式转换为文本来解决这个问题。