【发布时间】:2019-02-14 09:23:52
【问题描述】:
我使用 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 开始)进行搜索,但这对于 zip_codes 中的许多条目来说并不方便。
【问题讨论】:
-
请分享您的表格结构,邮政编码是否保存在不同的表格中?
-
@VladHanzha 不,它们是内联存储的。
-
这是他们的
text字段类型?在这种情况下,问题是您正在寻找带右括号的 {11111},但您的字段也包含 22222。在这种情况下,您应该寻找 11111,不带括号 -
你的意思是
select agents from Agents as agents where '11111' in (agents.zip_codes)?然后PostgreSQL抛出错误:malformed array literal: "11111" ... Array value must start with "{" or dimension information.
标签: postgresql hibernate hql