hibernate 学习笔记(2)——HQL和高级查询
来源:互联网 发布:mac mini u盘重装系统 编辑:程序博客网 时间:2024/06/06 05:02
hib 4.3 实体映射文件xml 中地址末尾的空格要去掉,在Myeclipse10中。
表之间的关联关系:()先不自动添加表间关联关系
1、一对多:one to many
grade 一方 =》多个学生
private Set<> ... = new HashSet<>();
xml:
<set name="..." >
<key column="gid"/>
<one-to-many class="...实体类" />
</set>
单向关联:只有设置的一方能得到另一方的信息
2、多对一:many to one
<many-to-one name="grade" class="..." column=""GID">
双向关联:级联操作 双方都进行了设置,使得双方都能够从自身看到对方的信息
ERROR1:TransientObjectException
在一所在方的<set>中添加casade="save-update"
ERROR2:TypeMismatchException
对象类型错误
级联删除: 设置cascade="delete"
在一所在方:<set> 内设置cascade="delete" inverse="true"
其中inverse属性设置为true时将删除的控制权限给予对方进行维护,false时自己维护
在一所在方<set>内设置cascade="all"后,即可实现级连的添加、删除、修改。
在实际开发中,并非所有的关联关系都适合使用双向关联,是不同的需求设定,如:加载租房信息时获得街道信息;反之,并不是很重要。
一对一:
<one-to-one name="..." class="...">或者
<many-to-one unique="true"/>
未设置cascade属性会使一表有数据一表为空
所以one-to-one cascade="all"
多对多:
<!-- many to many table:第三张表名--> <set name="teacherms" table="teacherm_studentm"> <key column="msid"/> <!-- 当前学生表的 (第三张表)FK msid --> <!--第三张表中的Fk: column="mtid" --> <many-to-many class="com.hlx.manytomany.Teacherm" column="mtid"/> </set>
<!-- many to many inverse="true"控制维护; cascade="all" 级联操作 --> <set name="studentms" table="teacherm_studentm" inverse="true" cascade="all"> <key column="mtid"/><!-- 当前老师表的 (第三张表)FK mtid --> <!--第三张表中的Fk: column="msid" --> <many-to-many class="com.hlx.manytomany.Studentm" column="msid"/> </set>
HQL(hibernate Query Language)
是面向对象的查询语言
[select ...] from Entity(类名或属性名区分大小写)[where ...] [group by ...]
String hql="from Dept";
List<> list = session.createQuery(hql).list();
hql="from Dept where ..."
hql="select ... from Dept"(部分查询)
hql="select did,dname from Dept"(执行后取出的值为Object数组)
参数绑定:
1、通过?设置参数:
hql="from Dept where deptno>? and ... ?"
List<> list = session.createQuery(hql).setParameter(0,10).setParameter(1,"").list();
进行设置问号的参数值
2、通过别名设置参数:
:dno
hql="from Dept where deptno>:dno and ... ";
session.createQuery(hql).setParameter("dno",10).list();
进行设置通过别名的参数值
排序、统计函数、分组函数
order by
group by ... having...
select count(0) from Emp;
使用createQuery(hql).uniqueResult();设置单一值或null
分页:
//设置第一条记录的位置
createQuery(hql).setFirstResult((pageIndex-1)*pageSize);
//设置最大返回的记录条数
createQuery(hql).setMaxResults(pageSize);
左外连接:
表名1 left outer join 表名2 on 条件
String hql="from Emp e left join e.dept d where d.dname='sss'";
右外连接:
String hql="from Emp e (obj[0])right join e.dept(obj[1])";
内连接:
String hql ="from Emp e inner join e.dept";
都会返回多个对象。所以到时候获取数据需要通过object数组进行。
左外抓取连接(迫切连接): 返回一个主要对象
String hql="from Emp e left join fetch e.dept"
List<Emp> list=session.createQuery(hql).list();
查询部门中没有员工的部门:
String hql="from Dept d where d.deptno not in (select e.dept.deptno from Emp)";
连接类型 HQL语法
内连接 inner join / join
迫切内连接 inner join fetch / join fetch
左外连接 left outer join / left join
迫切左外连接 left outer join fetch / left join fetch
右外连接 right outer join / riget join
- hibernate 学习笔记(2)——HQL和高级查询
- hibernate学习笔记——hql查询
- Hibernate学习笔记(十) — HQL查询
- Hibernate笔记:HQL查询总结(一)——简单属性查询和实体对象查询
- J2EE学习笔记——Hibernate HQL查询
- Hibernate—(HQL查询)
- Hibernate3学习笔记(4)——Hibernate查询技术之HQL语句
- Hibernate学习笔记总结(三)——Hibernate 3.x——HQL查询语言(重点)
- Hibernate 笔记 HQL查询
- Hibernate学习笔记(四)——HQL
- Hibernate学习笔记----HQL(2)
- hibernate高级查询技术之“HQL和QBC”的区别
- Hibernate HQL查询(2)
- Hibernate笔记:HQL查询总结(二)——条件查询(转)
- 兔八哥笔记14(2):Hibernate 查询语言(HQL)
- 兔八哥笔记14(2):Hibernate 查询语言(HQL)
- hibernate中hql查询(笔记)
- hibernate学习之六——HQL查询
- Oracle (+) 用法
- CUDA系列学习(一)An Introduction to GPU and CUDA
- 100亿数据1万属性数据架构设计
- eclipse打开当前文件所在文件夹的方法
- 解决 Mac 下 Android Studio 不打印日志
- hibernate 学习笔记(2)——HQL和高级查询
- 计算机视觉之跟踪算法——KLT点跟踪算法(LK算法))
- Qt应用程序自启动及管理员权限
- angular1 state路由传参/foreach循环
- 乐观锁,悲观锁,事务
- 使用CM 5.3.x安装集群监控服务CMS.mp4
- 遍历文件夹输出版本信息
- ECMAScript6入门简述&索引篇(摘自阮一峰的《ECMAScript 6 入门》)
- android图片上传springMvc