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

基于Criteriabuilder查询的长值通配符搜索

杨君之
2023-03-14

我想在一个字段上使用通配符搜索,这个字段是一个长值(在实体类中)和数据库中的整数。这里联系的是实体类,它的字段:Id在实体类中是长值,在数据库中是整数。下面是代码。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> query = builder.createTupleQuery();
Root<Contact> root = query.from(Contact.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (searchCriteria.getContactId() != null) {
    if(searchCriteria.getContactId().contains("%")){                
       predicates.add(builder.like( 

       (root.get(Contact_.id)),-->Note this line

       builder.literal(searchCriteria.getContactId()+"%")));

        }
    }
public static volatile SingularAttribute<Contact, Long> id;
((Expression<String>)(root.get(Contact_.id).as(String.class).

但是我得到查询语法异常,它不能转换成完美的语法。当我查看日志时,它给出的查询类似于->(cast(GeneratedAlias0.id as varchar(255)),但不是as(cast(GeneratedAlias0.id as string))。

共有1个答案

慕俊迈
2023-03-14

当我用类似的标签进行搜索时,我发现了一个很好的解决上述问题的方法,它只使用了criteriabuilder,我已经尝试过了,效果很好。我们可以在下面的链接中找到它。

JPA:如何在静态JPA元模型中使用数字列执行LIKE?

 类似资料:
  • 我使用这个分析器创建了一个模型: 我实现了如下所示的查询。我得到了所有预期的结果,除了像“A.B.C”这样的结果。我做错了什么?我哪里误解了事情? 我的代码基于以下资源:

  • 问题内容: 我有这样的SQL语句: 因此,它为personID提供了“区别”行: 如果我有这样的表: 它会回来 现在,我尝试通过JPA CriteriaBuilder进行此操作。 我的第一个想法是子查询: 但这会产生错误 怎么对这个? 马可 问题答案: 我认为解决方案比看起来简单。您忘记了包含在CriteriaBuilder子查询中。以下代码执行您要查找的查询。 此代码将创建以下查询: 我认为您正

  • 我正在开发JSF项目并将Elastic Search与本机JavaApi(不是Jest)一起使用。我在elasticsearch索引映射中为高级全文搜索定义了分析器和nGram过滤器。如何使用java api进行此查询定义?

  • 我对弹性搜索完全陌生。我在试着从弹性搜索中取记录。 我查了文件,但找不到任何解决办法。如果你在这里给我一些提示或一些网站,我可以解决我的问题,我将非常感谢。

  • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 在ES中,我使用ngram tokenizer来达到预期的结果: 所以,如果我的文档行像 上面的查询只显示了两个文档,但是当我尝试输入Peter sims或Peter simson时,除非我输入Peter tomson robert sims或Peter tomson robert si

  • 问题内容: 我有一个查询,用于查找按位置排序的结果。结果还必须考虑增值税,因此这也在查询中。不幸的是,该查询在未缓存时可能需要4秒钟以上的时间才能运行。谁能发现任何明显的问题或建议我做些什么来改善它? 只是为了澄清查询中正在发生的事情: 计算的距离是使用经/纬度的欧几里得距离 当包含增值税时,incvat字段用于显示价格 WHEN / THEN语句用于将价格0置于最底端 查询: 问题答案: 您可以