gpt4 book ai didi

arrays - 如何在 Hibernate 中使用 Postgres 数组 "contains"条件?

转载 作者:行者123 更新时间:2023-11-29 13:11:57 26 4
gpt4 key购买 nike

我如下编写了一个 Postgres 查询,但它在构建时失败了。如何在Spring-boot Hibernate中实现?

 @Query(value="SELECT t from CatalogView t WHERE t.locations=:locations AND STRING_TO_ARRAY(t.myColumn, ',') @> STRING_TO_ARRAY(:myColumn, ',')")
public Set<TrainerGuides> getData(@Param("locations") String locations,@Param("myColumn") String myColumn);

我为什么写这个?比较一堆用逗号分隔的字符串与 Postgres 中的无序字符串输入。

    catalog
----------------------------------
id title keywords
----------------------------------
1 Title-1 k2,k1,k3,k4,k5
2 Title-2 k1,k3,k5,k6

通过将关键字与我的输入 k1、k2、k5 进行比较来选择行

在上面的例子中,id 为 1 的行必须出现。

SELECT *
FROM catalog
WHERE STRING_TO_ARRAY(keywords, ',') @> STRING_TO_ARRAY('k1,k2,k5', ',')

最佳答案

您可以扩展 Hibernate Postgresql 方言并将 native 数据库功能添加到您的 HQL,这里是示例:

我从未使用过 STRING_TO_ARRAY,但其余的工作正常。

public class PostgreSQLDialect extends org.hibernate.dialect.PostgreSQLDialect
{

public PostgreSQLDialect()
{
super();
registerFunction("replace", new StandardSQLFunction("replace", Hibernate.STRING));
registerHibernateType(Types.ARRAY, "array");
registerFunction( "string_agg", new StandardSQLFunction("string_agg", Hibernate.STRING) );
registerFunction( "generate_series", new StandardSQLFunction("generate_series") );
registerFunction( "STRING_TO_ARRAY", new StandardSQLFunction("STRING_TO_ARRAY", Hibernate.STRING) );
}

@Override
public boolean supportsTupleDistinctCounts()
{
return true;
}

}

关于arrays - 如何在 Hibernate 中使用 Postgres 数组 "contains"条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649058/

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