这是我的另一个问题的一个问题。当有人(@franck)给我指出这个链接和这个链接后,我想最好把它作为一个不同的问题来提。
这是我所做的;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Client> cq = cb.createQuery(Client.class);
Root<Client> entity = cq.from(Client.class);
cq.select(entity);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
cq.where(predicates.toArray(new Predicate[]{}));
TypedQuery<Client> query = em.createQuery(cq); //<--- Error gets thrown here
return query.getResultList();
但它失败,但有以下例外情况;
java.lang.IllegalArgumentException: Parameter value [%10-2015%] did not
match expected type [java.lang.Character]
其中10-2015
是要搜索的字符串;
好的,在对各种策略进行了大量的实验之后,下面是我最终成功的方法。
我在这里看到了这篇文章,突然想起了JPAtuple
接口,它是一个可以返回多个结果类型的对象。因此,要执行我的like
比较,并且由于日期不能简单地转换为字符串,下面是步骤;
元组
like
表达式。predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
现在,这是我有的工作很漂亮;
Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}
注意-值得注意的事项-
07/10/2015 10:25:09 PM
因此我能够知道如何将我的like
表达式中的日期设置为“'%d/%m/%y%r'”
。虽然这对我来说是完美的,但是在我将其标记为正确答案之前,我将对其进行一些更广泛的测试,在此过程中,任何对我的策略有保留意见的人都可以对其进行评论。
最后,对一个帮助过的人来说...干杯!
我有一个ISODate格式的“DateAdd”Mongo集合 所以现在是当地时间1小时后 当我尝试获取2018-08-31 06:00:00之后添加的记录时,使用以下查询,我无法获取UTC中的记录 在MongoDB中搜索日期字段时,如何转换UTC日期?
我还没有为索引创建任何显式设置。谢了。
我有一个elasticsearch索引,其中包含具有以下字段的用户:.“名称”:“凯”“年龄”:“23”“位置”:“德里,印度”“标签”:[“搜索”,“nosql”]等。 我想在用户的所有字段中查询多个字符串(例如:[“nosql”、“德里”)。可以使用Java API吗? 这是我正在使用的代码示例。(但与问题无关)这只是为了了解我现在使用的对象。 感谢提前。:)
问题内容: 我想在文档中搜索“社交网络营销”。全部一起。但是我继续得到结果,单词分开。我有以下DSL查询: 我没有包含此短语和标题的文档,但是我也得到了包含短语单词的搜索结果(文档)以进行拆分。我要严格搜索。如果没有任何文档使用此短语,则不要检索任何文档或仅检索具有该标题的文档。为什么 运算符又 不起作用? 问题答案: 您可以使用类型词组尝试以下方法吗?看到这里说, 查询首先分析查询字符串以生成术
我想搜索视频列表并用频道图标将其显示在屏幕上,但我不知道如何在搜索查询中获得频道id或频道图标直接链接。 我正在关注youtube的开发人员页面(Java)中的一个例子,我希望搜索结果包含channel_id或channel_icon,该怎么办? [已解决] 我已经解决了我的问题,我编辑了我的字段过滤器,完整代码: 我有 channelId,我可以得到 channel icon,只需将 url 替
我在映射中设置了一个日期字段,如下所示: 在我的应用程序中,字段group psAssignedDate最初设置为空字符串。分配组时,将生成unix时间戳并将其存储在字段中。我试图使用elasticsearch的批量更新功能来引入一组带有“AssignedDate”的文档,因为还没有分配组。不过,Elasticsearch不会对文档进行索引。这在日志文件中: 弹力搜索似乎支持JSON空值...我需