如何在Hibernate中使用数组字段制作标准

时间:2016-04-07 00:36:34

标签: sql hibernate postgresql criteria

我正在使用HibernatePostgres并定义了character(1)[]列类型。

所以我不知道如何让这个criteria在数组中找到一个值。

喜欢这个查询

SELECT * FROM cpfbloqueado WHERE bloqueados @> ARRAY['V']::character[]

2 个答案:

答案 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