当前位置: 首页 > 知识库问答 >
问题:

是否可以使用原始SQL字符串创建QueryDSL谓词?

闻鹤龄
2023-03-14

我创建了一个GraphQL模式,其中有25个最流行的列作为可查询字段。我想添加一个泛型的“field”输入类型,它由一个名称(db列名+“_”+操作(如gte、gt、contains等)和一个值(用户正在搜索的值)组成。

因此,当用户(在GraphiQL中)输入类似(字段:{name:“age_gt”,值:“50”})作为GraphQL查询的搜索输入时,我可以得到:“age>50”。

所有这些都很好,但是当要创建谓词并将其添加到整个查询(booleanbuilder.and(new Predicate))时,我不知道如何创建一个只包含原始SQL字符串(“年龄>50”)的谓词。

我认为PredicateOperathtml" target="_blank">ion()可能是答案,但同样,没有文档,而且我在网上找不到任何示例。

我很抱歉没有发布代码,我所有的东西都在不同网络的防火墙后面,所以没有剪切和粘贴到我的互联网机器上。

共有1个答案

常甫
2023-03-14

在Hibernate中,可以使用自定义函数或函数-function(JPA2.1)插入任意SQL。在QueryDSL中,可以通过TemplateExpression注入任意JPQL/HQL。加在一起可以得到:

Expressions.numberTemplate("FUNCTION('SUM', {0}), x) 

但是,age>50as表达式也可能是有效的JPQL,因此可以编写:

Expressions.numberTemplate("SUM(age)")

不管怎样,最好创建一个访问器来遍历GraphQL查询并在QueryDSL中创建正确的表达式,因为TemplateExpressions容易出现SQL注入。

 类似资料:
  • 问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。 另外,请参阅本节以了解如何使用命名的本机查询。

  • 有一个类似http://someservice.com/confirm?{token}的网址 这是用招摇符号来描述这个终点的方法吗 如果用作查询参数,则得到 http://someservice.com/confirm?token=value这是不正常的 从另一方面来看,不可能以以下方式使用url符号: 因为路径中的查询字符串是不允许的。

  • 问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。

  • 是否可以使用通用sql将超过4000个字符的字符串插入CLOB 新增列: 我必须用SQL插入它 请指教。

  • 我尝试使用Jackson编写XML/JSON解析器。我使用支持XML的jackson-dataformat-xml。我需要将其中一个XML元素的内容提取为原始字符串,并将其原样放入POJO中。 你知道更好的办法吗?或者和杰克逊在一起是不可能的?

  • 本文向大家介绍Java使用正则表达式判断字符串是否以字符开始,包括了Java使用正则表达式判断字符串是否以字符开始的使用技巧和注意事项,需要的朋友参考一下 Java 正则表达式判断字符串是否以字符开始: 以上所述是小编给大家介绍的Java使用正则表达式判断字符串是否以字符开始,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!