首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jinq搜索集

如何使用Jinq搜索集
EN

Stack Overflow用户
提问于 2015-09-07 14:11:25
回答 1查看 254关注 0票数 1

实体类中有Set<Tag>集合。Tag类只包含Long idString值。我试图通过Place找到Tag,但我得到了错误Could not analyze lambda code

代码语言:javascript
复制
    String name = places.getTag().getName();
    if (name != null) {
        stream = stream.where(p -> p.getTags().iterator().next().getName().equals(name));
    }

有办法让它既紧又优雅吗?我知道我的代码是不正确的,而且我得到了错误,因为Jinq可能不支持类似于这个p.getTags().iterator().next().getName()的东西

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 18:27:24

我不熟悉您的模式,但也许您可以通过这样的方法来连接您的数据结构:

代码语言:javascript
复制
stream
   .joinList( p -> p.getTags() )
   .where( pair -> pair.getTwo().getName().equals(name) );

同样,这取决于您的数据库模式和实体,但是如果您有正确的关系设置,那么您可以使用以下内容进行更简单的操作:

代码语言:javascript
复制
tagStream
   .where( tag -> tag.getName().equals(name) )  // get the right tag
   .selectAllList( tag -> tag.getPlaces() )     // get all places with that tag

但是,如果不能使用join,则可以尝试使用子查询,但是子查询在不同的JPA提供程序上表现得有点精细。对于子查询,只需确保子查询与普通查询的格式相同。

代码语言:javascript
复制
stream = stream
   .where(p -> JinqStream.from(p.getTags())
      .where( tag -> tag.getName().equals(name) )
      .count() > 0);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32440691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档