【发布时间】:2017-11-01 07:05:53
【问题描述】:
我有一个 Java、GraphQL、Hibernate、PostgreSQL、QueryDSL 应用程序,它可以查询一个包含超过 275 列的非常大的 PostgreSQL 表。
我创建了一个 GraphQL 架构,其中包含 25 个最流行的列作为可查询字段。我想添加一个通用的“字段”输入类型,它包含一个名称(db 列名 +“_”+ 操作(如 gte、gt、包含等)和一个值(用户正在搜索的值为)。
因此,当用户(在 GraphiQL 中)输入类似 (field:{name:"age_gt", value:"50"}) 作为 GraphQL 查询的搜索输入时,我可以得出:“age > 50 ”。
一切正常,但是当需要创建谓词并将其添加到整个查询( booleanBuilder.and(new Predicate) )时,我无法弄清楚如何创建一个仅包含原始 SQL 字符串的谓词(“年龄 > 50”)。
我使用绑定到 Hibernate 的实体 POJO 和 jpa 生成的“Q”对象,以“正确”的方式创建了几个谓词。但我需要能够添加一个或多个只是 SQL 字符串的谓词。我什至不确定该功能是否存在,QueryDSL Predicates 的文档不存在。
我在考虑 PredicateOperation() 可能是答案,但同样,没有文档,我在网上找不到任何示例。
我很抱歉没有发布代码,我所有的东西都在不同网络上的防火墙后面,所以我的互联网机器上没有剪切和粘贴。
【问题讨论】:
-
您找到解决方案了吗?
-
Wiebke,我已经很久没有从事这个项目了。我刚才查看了我的代码,看起来我从来没有用一串 SQL 创建过谓词。但我确实记得完成了任务,并且我能够在没有这种能力的情况下完成我需要做的所有事情。此外,在我的项目代码中,我没有使用 PredicateOperation。我确实从键中解析出字段和操作,然后通过简单的 case 语句发送操作并以这种方式构建谓词。因此,如果我得到 key,value of (age_lt, 50),case 语句将创建: Predicate p = path.lt(50);希望这会有所帮助。
标签: java postgresql hibernate jpa querydsl