java中使用QBC的好处_使用QBC的方式应用多对多关系中的查询
关系描述
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的方式应用多对多关系中的查询相关推荐
- java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...
ES对应mysql的group by分组查询javaApi,多对多关系的分组查询 比如我这边有个下列订单索引数据,现在的需求是按用户(fmerchantId)和支付方式(fchannelId)进行分组 ...
- Hibernate 学习心得1: 多对多关系中,中间表无法插入数据。
Hibernate 学习心得之一 多对多关系中,中间表无法插入数据. 最近学习 spring4+hibernate4,学习中遇到了很多坑. 在这里我来说说我遇到的坑,这里就不介绍如何spring如何集 ...
- python3 将列表中元素转化为字典_软件测试学Python(七):Python中的变量和标准数据类型...
上一篇文章中,凯哥给大家介绍了Python中的常量(字面值). 测试凯哥:软件测试学Python(六):Python中的常量zhuanlan.zhihu.com 在这篇文章中,凯哥带各位学习测试的知 ...
- 关于python字典以下选项中描述错误的是_关于 Python 对文件的处理,以下选项中描述错误的是_学小易找答案...
[单选题]小花最近疯狂迷恋李佳琦的推销产品,在李佳琦的广告营销下,小花兴致冲冲的买下来一只某牌口红,回来后却发现不适合自己,扔在一边闲置.根据消费者性格划分属于哪种购买行为? [单选题]采用邀请招标方 ...
- 关于python赋值语句下列选项中描述正确的是_关于Python的分支结构,以下选项中描述正确的是()。...
38.并集选择器是各个选择器通过逗号连接而成的,关于构任何形式的选择器都可以作为并集选择器的一部分.() 若变量a.支结中描b.t已经正确定义,要将a和b中的数据进行交换,以下选项中不正确的是 若有以 ...
- java uml类图虚线实线_终于明白六大类UML类图关系了
UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...
- sv验证中记分板的作用_将记分员添加到您的Python游戏中
sv验证中记分板的作用 这是有关使用Pygame模块在Python 3中创建视频游戏的系列文章的第10部分. 以前的文章是: 通过构建一个简单的骰子游戏,学习如何用Python编程 使用Pygame模 ...
- mysql 多对多建表_mysql – 为什么在多对多关系中创建一个新表?
我正在创建一个数据库来存储有关乐器的信息.我在MySQL工作台中使用EER图来可视化每个表之间的关系. 当我创建多对多(n:m)关系时,会创建一个新表,其中包含新关系中涉及的表的主键.其他关系,如一对 ...
- hibernate的多对多关系中对inverse属性的设置
现有user,role和user-role表,user-role为两表中间的关系表,两表为[多对多关系] 现给role(被动)设置inverse="true"(放弃对关系的维护,即 ...
最新文章
- 豆瓣评分 9.3,史上最好的 C 语言著作,竟然翻车了......
- 独家 | 谷歌医学AI在生活中的精确度(附链接)
- 向PE文件中空白处添加代码
- 浅谈网页中的字体的设置
- swal如何加入html语言,Sweet Alert弹窗点击确定后执行页面跳转等操作
- 信用卡如何安全取现?
- windows2012同步linux时间,Windows server2012时间同步NTP配置
- 照片看3秒就销毁的软件_3.9秒破百,比亚迪汉EV到店实拍:实车比照片更好看
- Java NPOIFSFileSystem.getRoot方法代碼示例
- SpringMVC XXX-servlet.xml ApplicationContext.xml
- springboot mybatis 事务_真香——Github上的优秀SpringBoot框架
- linux 6.8 多网卡绑定,Linux6.1/6.5 双网卡绑定
- 离散数学——基础推理
- JSP打印九九乘法表和表格
- 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)
- C++:关于保留小数和保留有效数字。
- 包装成悲伤消费的骗局正在收割午夜的年轻人
- 邮件服务器imap有推送吗,为什么我的邮件服务器支持imap协议还收不到邮件内容...
- Verilog 语言 ——计数器
- 【超级实用】最强DIY级毕设级DCDC电源模块HGD01
热门文章
- 大神干货:腾讯广告算法大赛亚军宝藏指南带你顺利出圈
- 如何根据对象获取到对应的表名_Hands-on! 如何给 TiDB 添加新系统表
- js 拉勾网效果_python爬取拉勾网职位数据
- python用turtle画菱形_使用 Python Turtle 设计简单而又美丽的图形
- 美国广告市场:Facebook和Google将占据四分之一市场份额
- 国际版抖音TikTok平台怎么样?
- linux云服务器 个人,使用ownCloud在Linux安装你的个人云服务
- Star Schema完全参考手册读书笔记四
- 白板机器学习笔记 P60-P65 EM算法
- Spark初步 从wordcount开始