关系描述

User实体和Group实体是多对多的关系,实体和表的对应关系如下:

Java Bean

User

tb_user

Group

tb_group

tb_user表的字为:ID,UserName,FirstName,LastName

tb_group表的字段为:ID,Name

其中关联关系中间表为:tb_userGroup,其字段为:ID,UserID(外键,引用tb_user表的id),GroupID(外键,引用tb_group表的id)

User实体的代码如下:

public class User{

private Long id;

private String userName;

private String firstName;

private String lastName;

private Set groupList = new HashSet();

// Constructors

/** default constructor */

public User() {

}

public Long getId() {

return this.id;

}

public void setId(Long id) {

this.id = id;

}

public String getUserName() {

return this.userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getFirstName() {

return this.firstName;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public String getLastName() {

return this.lastName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

public String getUsername() {

return this.userName;

}

public Set getGroupList() {

return groupList;

}

public void setGroupList(Set groupList) {

this.groupList = groupList;

}

}

Group实体代码如下:

public class Group implements java.io.Serializable {

private Long id;

private String name;

private Set userList = new HashSet();

// Constructors

/** default constructor */

public Group() {

}

public String getName() {

return this.name;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public void setName(String name) {

this.name = name;

}

public Set getUserList() {

return userList;

}

public void setUserList(Set userList) {

this.userList = userList;

}

}

User实体的映射文件如下:

hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

Group实体的映射文件如下:

hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

那么查询在某个Group的User集合的QBC写法为:

public Set getUnBelongUserList(Long groupId) {

DetachedCriteria userCriteria = DetachedCriteria

.forClass(TmsUser.class);

userCriteria.createAlias("groupList", "groupList", Criteria.LEFT_JOIN);

Property tempGroupId = Property.forName("groupList.id");

userCriteria.add(tempGroupId.eq(groupId));

return this.getHibernateTemplate().findByCriteria(userCriteria);

}

说明:

lcreateAlias方法不光能为实体属性取别名,他同时也会立即加载该属性,相当于setFetchMode方法。这样写后Hibernate会关联去关联tb_userGroup和tb_group表

l用面向对象的思想,通过User实体下的Group集合groupList.id来匹配查询条件,这样写后,Hibernate会判断groupList集合中,哪一个group的id等于参数groupId

生成的Sql语句大概为:

select

*

from

tb_user this_

left outer join

tb_userGroup grouplist3_

on this_.ID=grouplist3_.UserID

left outer join

tb_group grouplist1_

on grouplist3_.GroupID=grouplist1_.ID

wheregrouplist1_.ID=?

java中使用QBC的好处_使用QBC的方式应用多对多关系中的查询相关推荐

  1. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...

    ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...

  2. Hibernate 学习心得1: 多对多关系中,中间表无法插入数据。

    Hibernate 学习心得之一 多对多关系中,中间表无法插入数据. 最近学习 spring4+hibernate4,学习中遇到了很多坑. 在这里我来说说我遇到的坑,这里就不介绍如何spring如何集 ...

  3. python3 将列表中元素转化为字典_软件测试学Python(七):Python中的变量和标准数据类型...

    上一篇文章中,凯哥给大家介绍了Python中的常量(字面值). 测试凯哥:软件测试学Python(六):Python中的常量​zhuanlan.zhihu.com 在这篇文章中,凯哥带各位学习测试的知 ...

  4. 关于python字典以下选项中描述错误的是_关于 Python 对文件的处理,以下选项中描述错误的是_学小易找答案...

    [单选题]小花最近疯狂迷恋李佳琦的推销产品,在李佳琦的广告营销下,小花兴致冲冲的买下来一只某牌口红,回来后却发现不适合自己,扔在一边闲置.根据消费者性格划分属于哪种购买行为? [单选题]采用邀请招标方 ...

  5. 关于python赋值语句下列选项中描述正确的是_关于Python的分支结构,以下选项中描述正确的是()。...

    38.并集选择器是各个选择器通过逗号连接而成的,关于构任何形式的选择器都可以作为并集选择器的一部分.() 若变量a.支结中描b.t已经正确定义,要将a和b中的数据进行交换,以下选项中不正确的是 若有以 ...

  6. java uml类图虚线实线_终于明白六大类UML类图关系了

    UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...

  7. sv验证中记分板的作用_将记分员添加到您的Python游戏中

    sv验证中记分板的作用 这是有关使用Pygame模块在Python 3中创建视频游戏的系列文章的第10部分. 以前的文章是: 通过构建一个简单的骰子游戏,学习如何用Python编程 使用Pygame模 ...

  8. mysql 多对多建表_mysql – 为什么在多对多关系中创建一个新表?

    我正在创建一个数据库来存储有关乐器的信息.我在MySQL工作台中使用EER图来可视化每个表之间的关系. 当我创建多对多(n:m)关系时,会创建一个新表,其中包含新关系中涉及的表的主键.其他关系,如一对 ...

  9. hibernate的多对多关系中对inverse属性的设置

    现有user,role和user-role表,user-role为两表中间的关系表,两表为[多对多关系] 现给role(被动)设置inverse="true"(放弃对关系的维护,即 ...

最新文章

  1. 豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了......
  2. 独家 | 谷歌医学AI在生活中的精确度(附链接)
  3. 向PE文件中空白处添加代码
  4. 浅谈网页中的字体的设置
  5. swal如何加入html语言,Sweet Alert弹窗点击确定后执行页面跳转等操作
  6. 信用卡如何安全取现?
  7. windows2012同步linux时间,Windows server2012时间同步NTP配置
  8. 照片看3秒就销毁的软件_3.9秒破百,比亚迪汉EV到店实拍:实车比照片更好看
  9. Java NPOIFSFileSystem.getRoot方法代碼示例
  10. SpringMVC XXX-servlet.xml ApplicationContext.xml
  11. springboot mybatis 事务_真香——Github上的优秀SpringBoot框架
  12. linux 6.8 多网卡绑定,Linux6.1/6.5 双网卡绑定
  13. 离散数学——基础推理
  14. JSP打印九九乘法表和表格
  15. 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)
  16. C++:关于保留小数和保留有效数字。
  17. 包装成悲伤消费的骗局正在收割午夜的年轻人
  18. 邮件服务器imap有推送吗,为什么我的邮件服务器支持imap协议还收不到邮件内容...
  19. Verilog 语言 ——计数器
  20. 【超级实用】最强DIY级毕设级DCDC电源模块HGD01

热门文章

  1. 大神干货:腾讯广告算法大赛亚军宝藏指南带你顺利出圈
  2. 如何根据对象获取到对应的表名_Hands-on! 如何给 TiDB 添加新系统表
  3. js 拉勾网效果_python爬取拉勾网职位数据
  4. python用turtle画菱形_使用 Python Turtle 设计简单而又美丽的图形
  5. 美国广告市场:Facebook和Google将占据四分之一市场份额
  6. 国际版抖音TikTok平台怎么样?
  7. linux云服务器 个人,使用ownCloud在Linux安装你的个人云服务
  8. Star Schema完全参考手册读书笔记四
  9. 白板机器学习笔记 P60-P65 EM算法
  10. Spark初步 从wordcount开始