当前位置: 首页 > 面试题库 >

带有QueryDSL的Postgresql数组函数

商燕七
2023-03-14
问题内容

我使用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用值分隔的值,


 类似资料:
  • 我正在使用查询DSL的Spring数据JPA,并试图在条件中使用求和函数,因为我正在使用分页,所以我必须首先获得计数。所以我有如下的Java代码:- 它创建这样的查询:- 我得到。 上述查询在中也不起作用,因为sum函数不能与count-in-where条件一起使用。当我必须先进行计数,然后再获取真实数据时,我不知道如何处理这样的问题。有人能帮我解决这个问题的方法吗。 请不要建议注释,因为我不能使

  • 我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并

  • 当我在spring boot中使用postgresql函数时,当我使用array参数时,它返回一个数据不匹配错误。 我有一份模型文件。我正在将数据按顺序保存到这个模型文件中。当我以下面的方式将此发送到函数时,我得到一个错误。 多谢了。

  • 问题内容: 我在PostgreSQL类型上使用%%运算符,该运算符将hstore(有效键值类型)转换为元素交替为{{key,value},{key value}}的数组。 当我想返回这些平坦的hstore的数组时,出现此错误:由于PostgreSQL缺乏对数组数组的支持。 从好奇心的角度来看,有人知道为什么不支持这些吗?更重要的是,这种情况是否可以解决? 目前,我将结果串联成一个字符串(用逗号分隔

  • 问题内容: 当我运行此查询时,输出为:SUNDAY。但我们知道今天是星期二(2013年1月1日)。和 然后将查询更改为 答案是:星期二。 然后将查询更改为 答案是:星期一。 当我使用sysdate时,为什么将SUNDAY显示为输出? 我是oracle db的新手。请帮我。 问题答案: 用这个: 您正在使用此: 给您日期= 1/1/0013,即星期天