我正在使用Hibernate
和Postgres
并定义了character(1)[]
列类型。
所以我不知道如何让这个criteria
在数组中找到一个值。
喜欢这个查询
SELECT * FROM cpfbloqueado WHERE bloqueados @> ARRAY['V']::character[]
答案 0 :(得分:4)
我不熟悉Postgres
及其类型,但您可以使用custom basic type mapping定义自己的类型。这可以简化查询。
关于Postres数组类型和Hibernate,有很多关于SO的线程,例如,this one。另一个可能有用的数组映射示例is here。最后,here is an example使用标准和用户类型。
代码示例可能是
List result = session.createCriteria(Cpfbloqueado.class)
.setProjection(Projections.projectionList()
.add(Projections.property("characterColumn.attribute"), PostgresCharArrayType.class)
)
.setResultTransformer(Transformer.aliasToBean(Cpfbloqueado.class))
.add(...) // add where restrictions here
.list()
此外,如果对实现不重要,您可以在实体模型中定义最大长度,使用@Column(length = 1)
为您的字段添加注释。
或者,如果您需要存储长度为1
的字符数组,则可以使用collection type。
我希望我能说得对,但是如果更好地描述问题域会很好。
答案 1 :(得分:2)
所以你有单个字符数组...问题是在PG中不是固定长度。我有这个问题,但大约10年前。那时我将该列映射为字符串,这样我就可以处理内部数据 - 只需用逗号分隔,然后执行所需操作。
如果你讨厌这种方式,就像我一样...寻找text[]
类型的列 - 这是更常见的,所以很容易找到一些东西。请看这个示例项目:
https://github.com/phstudy/jpa-array-converter-sample