我的问题需要一些解释。我尽力使它尽可能短,而不会遗漏重要方面。因此,已经感谢所有阅读这本书直到最后的人。
使用多个查询参数作为过滤器来执行GET请求
api/parentResource?areaCode=11&childEntity.kvlist.API_KEY=123CBA321
该示例请求将检索属于某个区域的parentResource
列表,并在其子实体的列表中具有键值对API_KEY=123CBA321
(列表本身也是该实体的子实体)子实体,为简便起见,我们称其为 KV_list )。
使用Querydsl到目前为止,我已经完成了这项工作,但是有一件事我无法解决自己:
问题是问题,当使用AND结合词时,querydsl的行为可能与预期的 1 相同。 我需要实现的是,如果实际的 KV- 对 存在,那么KV_list上的过滤器仅返回真实的BooleanExpression / Predicate。 >
示例:
KV_list表包含以下记录:
+-------+-----------+-----------+---------------+
| id | key | value | foreign_key |
+-------+-----------+-----------+---------------+
| UUID1 | API_KEY | 123CBA321 | childEntityFK |
| UUID2 | KEY2 | XYZ987 | childEntityFK |
| UUID3 | OTHER_KEY | NNN | childEntityFK |
+-------+-----------+-----------+---------------+
尽管您希望上面的GET请求能够正常工作,但以下内容不会返回任何内容,因为KV对不存在:
api/parentResource?areaCode=11&childEntity.kvlist.KEY2=NNN
1 不幸的是,querydsl只是检查是否存在key=KEY2
AND 一个value=NNN
,然后返回一个真实的谓词。
该模型如下所示:
Parent <--1:n--> ChildEntity <--1:n--> KV_Entity
键和值的简单结合:
ExpressionUtils.allOf(this.predicate,
QParent.parent.childEntities.any().kvEntities.any().key.eq(var_key),
QParent.parent.childEntities.any().kvEntities.any().value.eq(var_value)
);
直接在KV对象上调用eq方法:
ExpressionUtils.and(this.predicate,
QParent.parent.childEntities.any().kvEntities.any()eq(var_kvObject)
);
JPAExpressions.select()。from()。join()...
上述方法的几种风味
我真的很困,不胜感激。 预先感谢!
正在使用的框架/库:
答案 0 :(得分:-1)
我不知道您所提问题的全部内容。 也许您可以创建一个虚拟密钥(哈希)。
其中包含var_key
和var_value
。
然后您可以使用
QParent.parent.childEntities.any().kvEntities.any().hash.eq(hash)
搜索kvEntities