我有一个对象(BlogPost),它包含一个M:N元素集合(标签).

如何查询一个对象(BlogPost),其中至少有一个对象的标签与一组标签(由用户定义)中的元素与JPA2(Hibernate)匹配.

findBlogPostWithAtLeastOneMatchingTag(Collection<Tag> tags){ ???? }

我的主要问题是,我实际上需要比较两个标签集合:
– BlogPost的标签集合.
– 我搜索的集合

我尝试从Post p中选择p,其中p.tags在(:tags)中但它不起作用,因为我的帖子实体只有一个标签.

那我该怎么做呢?

我的BlogPost实体看起来像这样.它有几个标签.

@Entity
public class BlogPost{

    /** The tags. */
    @ManyToMany()
    @NotNull
    private Set<Tag> tags;

    @NotBlank
    private String content;

    ...
}

解决方案不能是JPQL,JPA-Criteria(不是Hibernate-Criteria)也可以.

解决方法

如果你喜欢JPA Criteria,这就是你的解决方案:
List<Integer> mytagsIds = new ArrayList<Integer> ();
mytagsIds.add(1);
mytagsIds.add(2);

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<BlogPost> cq = cb.createquery(BlogPost.class);
Root<BlogPost> blogPost = cq.from(BlogPost.class);
SetJoin<BlogPost,Tag> tags = blogPost.join(BlogPost_.tags);
Predicate predicate = tags.get(Tag_.id).in(mytagsIds);
cq.distinct(true);
cq.where(predicate);
TypedQuery<BlogPost> tq = em.createquery(cq);
return tq.getResultList();

此解决方案使用应由JPA实现生成的canonical MetaModel类BlogPost_和Tag_.

如何查询与JPA2的M:N关系?的更多相关文章

  1. 模拟OICQ的实现思路和核心程序(一)

    根据许多网友需求,特地把我站的这个模拟OICQ的在线聊天的东西献给大家!$onlineresult=mysql_query;$onlinenumber=mysql_num_rows;echo"欢迎光临,共有:".$onlinenumber."位朋友在线,按头像发短信息:";for{if(!talkto=".$onlineuser['Name']."','".$onlineuser['Name']."','width=300,height=250')>

  2. 支持oicq头像的留言簿(二)

    phpinclude;if{$time=date;$ip=$REMOTE_ADDR;//留言人ip地址$name=trim;$email=trim;$title=strip_tags;$nnote=nl2br;//先去掉html标记,再将换行符转成。$nnote){//检查是否填写完整echo"对不起,您必须填所有内容!A-Z^_`a-z{|}~]$',$email)//email合法性验证){echo"email不合法!"."

  3. 支持oicq头像的留言簿(一)

    php//这里改为自己的数据库用户名与密码$db=mysql_connect;mysql_select_db;//这里改为自己的管理用户名和密码$username="demo";$password="demo";?phpinclude;$result=mysql_query;$row=mysql_num_rows;//查看查询结果有多少行$max=$row;//帖子总数//设每页显示10篇,可自行设定,$p总页数,$page第几页,$low从第几行开始读,$x读取几行if(!>

  4. 通过ICQ网关发送手机短信的PHP源程序

    //NB:YoumusthaveregisteredyourICQ#athttp://web.icq.com/sms/login/inorderforthisscripttowork//###########################################################//****************************************************************\//Config:$uin="";//yourICQnumber$pas

  5. 模拟OICQ的实现思路和核心程序(二)

    3在线用户的信息扫描和更新在网页中使用内置框架来调用扫描和更新程序,这行也能在网页源代码里面看到!4信息扫描和更新程序userflush.php

  6. 将OICQ数据转成MYSQL数据

    >

  7. 模拟OICQ的实现思路和核心程序(三)

    5聊天信息的发送、阅读和回复程序-shortalk.php

  8. php – 在Doctrine2中使用部分查询和复合键时,“无映射字段”

    我有两个名为Person和Tag的模型.一个人有很多标签,标签主键是person_id和标签的复合键.Tag模型中有一个包含大量数据的数据字段.我正在设置一个不需要该字段数据的查询,因此我想设置一个不检索该字段的查询.我试过以下查询:在这里,我得到了一些预期的错误.类Tag的部分字段选择必须包含标识符.没问题,我添加联系人字段:但是现在,我得到了类Tag上没有名为“contact”的映射字段.Doctrine2不支持对复合键进行部分查询吗?

  9. php – Laravel在Eloquent mutators中保存了多对多的关系

    ))在保存模型之前,不能附加多对多关系.在设置$model->标签之前在模型上调用save(),你应该没问题.原因是模型需要具有Laravel可以放入数据透视表的ID,这需要两个模型的ID.

  10. php – 音乐流派API?

    有没有人知道任何音乐API,让你用歌曲名称查询,并返回一个类型?song=Baby\u0026amp;artist=JustinBieber并且回归是’流行’?我正在制作一个依赖于唯一有趣的功能是预测的应用程序,但我需要Genre来确定一些额外的数据!您可以使用last.fmAPI:http://www.last.fm/api/show?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部