gpt4 book ai didi

postgresql - hibernate 、PostgreSQL : how to search in an array column

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

我使用 PostgreSQL 表 agents .它有一列 zip_codes character(5)[]存储代理负责区域的邮政编码。

它存储agent1邮政编码 {11111,22222}agent2邮政编码 {33333} .

我想寻找负责某个特殊区域的所有代理商。

没有 Hibernate 很容易:SELECT * FROM agents WHERE '11111' = ANY (zip_codes)返回 agent1 .

但是我如何使用 HQL 实现呢?它不知道any .但是如果我使用 in相反,我会得到错误的结果:如果我写 select agents from Agents as agents where '{11111}' in (agents.zip_codes) , agent1不会被发现。如果我使用 '{33333}'相反,agent2会被发现。

当然,我可以使用类似(在 sql 中)WHERE zip_codes[1] = '11111' OR zip_codes[2] = '11111' 之类的东西进行搜索(PostgreSQL 中的数组以索引 1 开头),但这对于邮政编码中的许多条目来说并不方便。

最佳答案

你可以这样注册方言

public class MyPostgresSQLDialect extends PostgreSQLDialect {
public MyPostgresSQLDialect() {
super();

this.registerFunction( "array_any", new SQLFunctionTemplate(StandardBasicTypes.INTEGER,"ANY(?1)") );
this.registerFunction( "array_array", new SQLFunctionTemplate(StandardBasicTypes.INTEGER,"array[?1]") );

}
}

现在你可以在hql中使用了

String hql = " from tablename" +
" where year = :year and month = :month and :version = array_any(versions)";

记得在 sessionFactory 中注册方言

<prop key="hibernate.dialect">com.test.MyPostgresSQLDialect</prop>

关于postgresql - hibernate 、PostgreSQL : how to search in an array column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54686971/

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