Hibernate QBE 复合查询问题
来源:互联网 发布:人工智能有哪些领域 编辑:程序博客网 时间:2024/05/22 08:19
首先,有两个实体,分别是Client和Trade,它们之间是一对多的关系。
Client类部分代码如下:
Trade类部分代码如下:
当我做复合查询即按照trade的date属性和client的id属性去查询时,如果是通过criteria.add(Example)方式,则查询返回的结果是所有trade,查询代码如下:
后台打印出的sql语句为:
如果查询client时,不使用Example,而使用criteria.add(Restrictions.eq())方式,则会查询出满足条件的记录,查询代码如下:
后台打印的sql语句如下:
可以看到,使用这种方式查询时,在where条件中会有client1_id=?,而使用Example就没有。不知道什么原因,困扰了我好几天了。
虽然可以使用这中方式,解决使用Example查询时的问题,但我想弄明白原因。
刚才试了下查询Client的非主键属性,则查询结果为满足条件的记录。where条件语句中and后面会加上Client的条件,而不是1=1了。
所以,在做复合查询时首先要判断是否为主键查询,主键查询需要区别对待,需要使用userCriteria.add(Restrictions.idEq(id)),我想着也就是为什么会有idEq这个方法的原因吧,而且如果只是主键查询,那么打印出的sql语句中and后面会有client1_id=? and 1=1。
解释下hibernate打印出的sql语句,复合查询使用Example时,hibernate打印出的sql语句where部分其实分为两个部分,第一个部分是针对主表的查询条件,第二部分是针对关联表的查询条件。
如果没有查询条件,那么打印出的sql语句where部分为:
where 1=1 and 1= 1
如果是主表的非主键查询条件,那么打印出的sql语句where部分为:
where 主表条件 and 1=1
如果是主表的主键查询条件,那么打印出的sql语句where部分为:
where this_.id=? and 1=1 and 1=1
[注] this_.id=? and 1=1属于查询的第一部分,主表查询条件。主键查询需要使用criteria.add(Restrictions.idEq(id))。
如果是关联表的查询条件,那么打印出的sql语句where部分为:
where 1=1 and 关联表条件
如果是按照关联表的主键查询,那么打印出的sql语句where部分为:
where 1=1 and 关联表.id = ? and 1=1
[注] 关联表.id = ? and 1=1属于查询的第二部分,关联表查询条件。主键查询需要使用criteria.add(Restrictions.idEq(id))。
总结:
Hiberante在使用QBE查询时,如果是对主键查询,是不起作用的,即使主键设置了值。
在这种情况下,需要对主键查询时,可以使用criteria.add(Restrictions.idEq(id))来实现。
- Hibernate QBE 复合查询问题
- Hibernate QBE查询
- Hibernate QBE 级联查询
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
- Hibernate的QBE查询方式
- hibernate Criteria QBC,QBE查询
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- Hibernate的HQL、QBC、QBE查询总结
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- hibernate 复合主键查询的问题
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate 复合查询
- Hibernate 复合查询
- Hibernate复合查询
- struts2 自学笔记(2)
- FILE类
- Python SQLITE数据库操作简便易用
- C语言文件操作之--文件的读写
- C/C++ 文件读写操作总结
- Hibernate QBE 复合查询问题
- warning: suggest parentheses around assignment used as truth value
- CPU时间片
- jar 命令
- 每日设计模式——享元模式
- Sencha Touch 自定义主题
- Reading List for Computer Vision Newbie
- 无意中看见多年不见的好友庄海宗
- 日常记录