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

查询DSL类似操作简单路径

暨嘉
2023-03-14

与这个问题类似,我想使用我自己的用户定义类型“Account tNumber”执行一个SQL“like”操作。

QueryDSL实体类(定义列的字段)如下所示:

public final SimplePath<com.myorg.types.AccountNumber> accountNumber;

我尝试了以下代码来实现SQL中的“like”操作,但是在运行查询之前比较类型时出现错误:

final Path path=QBusinessEvent.businessEvent.accountNumber;
final Expression<AccountNumber> constant = Expressions.constant(AccountNumber.valueOfWithWildcard(pRegion.toString()));
final BooleanExpression booleanOperation = Expressions.booleanOperation(Ops.STARTS_WITH, path, constant);
expressionBuilder.and(booleanOperation);

错误为:

org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [7!%%] did not match expected type [com.myorg.types.AccountNumber (n/a)]

有人曾经使用QueryDSL/JPA组合实现过这一点吗?

共有3个答案

晋弘义
2023-03-14

似乎存在bug/歧义。在我的例子中,我需要按不同类型的两个字段进行搜索(StringNumber

SELECT * FROM table AS t WHERE t.name = "%some%" OR t.id = "%some%";

我的代码如下:

BooleanBuilder where = _getDefaultPredicateBuilder();
BooleanBuilder whereLike = new BooleanBuilder();
for(String likeField: _likeFields){
    whereLike = whereLike.or(_pathBuilder.getString(likeField).contains(likeValue));
}
where.and(whereLike);

如果第一个_likeFieldsString-请求工作正常,否则会抛出Exception。

缑桐
2023-03-14

您是否尝试使用String常量来代替?

Path<?> path = QBusinessEvent.businessEvent.accountNumber;
Expression<String> constant = Expressions.constant(pRegion.toString());
Predicate predicate = Expressions.predicate(Ops.STARTS_WITH, path, constant);
邢飞雨
2023-03-14

最后,我的同事给了我一个提示,让我做以下事情:

 if (pRegion != null) {
        expressionBuilder.and(Expressions.booleanTemplate("{0} like concat({1}, '%')", qBusinessEvent.accountNumber, pRegion));
 }

这似乎很管用!

 类似资料:
  • 我想将下面的结构存储在Hazelcast缓存中。(结构仍未定稿) value1/唯一键{ 例如,搜索查询数据->{“isin”:“isin222”和“issue_cntry”:“uk”},应该从value2返回所有数据集。{“sedol”:“sedol123”或“id_bb_global”:“bbg12345676”}应从值1返回所有数据集 问题: 在Hazelcast中存储这种数据结构的最佳方法

  • 当我使用以下HQL时,我得到了DML操作不支持的错误

  • 我想让ElasticSearch在我的盒子上工作。我有以下映射: 所以我有一个“运动鞋”索引,它有一个“运动鞋”类型,一个“品牌”属性,它有一个“ID”和一个“标题”。 检查运动鞋是否存在,运行curl-xget“http://localhost:9200/sneakers/sneaker/1?prettley”,我得到: 现在,runningcurl-xget'http://localhost:

  • 主要内容:匹配所有查询,全文查询,匹配查询,multi_match查询,查询字符串查询,期限等级查询,范围查询,复合查询,连接查询,地理查询在Elasticsearch中,通过使用基于JSON的查询进行搜索。 查询由两个子句组成 - 叶查询子句 - 这些子句是匹配,项或范围的,它们在特定字段中查找特定值。 复合查询子句 - 这些查询是叶查询子句和其他复合查询的组合,用于提取所需的信息。 Elasticsearch支持大量查询。 查询从查询关键字开始,然后以对象的形式在其中包含条件和过滤器。以下描

  • 主要内容:创建一个添加查询在MS Access和其他DBMS系统中,查询可以做的不仅仅是显示数据,它们实际上可以对数据库中的数据执行各种操作。 操作查询是一次可以添加,更改或删除多个记录的查询。 添加的好处是,可以在运行之前在Access中预览查询结果。 Microsoft Access提供了种不同类型的操作查询 - 附加 更新 删除 生成表 操作查询不能撤消。应该考虑使用更新查询来对要更新的表进行备份。 创建一个添加查询

  • 本文向大家介绍Java使用Jdbc连接Oracle执行简单查询操作示例,包括了Java使用Jdbc连接Oracle执行简单查询操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作。分享给大家供大家参考,具体如下: Java Jdbc 连接 Oracle 执行简单查询示例: 也可以使用防止SQL注入PreparedStatement方法