带有QueryDSL的Postgresql数组函数

我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。

@TypeDefs(

{@TypeDef(name = "string-array", typeClass =

StringArrayType.class)}

)

@Entity

public class Entity {

@Type(type = "string-array")

@Column(columnDefinition = "text[]")

private String[] tags;

}

适当的SQL是:

CREATE TABLE entity (

tags text[]

);

使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是:

SELECT * FROM entity WHERE tags @> '{"someTag","anotherTag"}'::text[];

(摘自:https :

//www.postgresql.org/docs/9.1/static/functions-

array.html)

可以用QueryDSL做到吗?像下面的代码?

predicate.and(entity.tags.eqAll(<whatever>));

回答:

  1. 第一步是生成适当的sql: WHERE tags @> '{"someTag","anotherTag"}'::text[];
  2. 第二步由coladict描述(非常感谢!):找出被调用的函数:@>是arraycontains和:: text []是string_to_array
  3. 第三步是正确调用它们。经过数小时的调试,我发现HQL不会将函数视为函数,除非我添加了一个表达式符号(在我的情况下:… = true),所以最终的解决方案如下所示:predicate.and(Expressions.booleanTemplate("arraycontains({0}, string_to_array({1}, ','))=true", entity.tags, tagsStr)); 其中tagsStr-是一个String用值分隔的值,

以上是 带有QueryDSL的Postgresql数组函数 的全部内容, 来源链接: utcz.com/qa/397739.html

回到顶部