最近空闲了很长一段时间..忘了不少了
1.Query query = session.createQuery("from Emp"); // HQL语句
2.List empList = query.list(); 在默认情况下,hibernate会把所有数据装入list
3.<generator class="assigned" /> 在idcolumn中设置主键的获取方式
identity,自动主键 都需要数据库功能的支持
sequence,序列主键
<generator class="native">
<param name="sequence">emp_seq</param>
</generator>
native,数据库会根据自己的方言自动选择一个主键生成方式
4.Iterator it = query.iterate(); 默认情况下,hibernate只会取出数据库的所有主键放入it
如果在Emp.hbm.xml进行lazy设置
<class name="domain.Emp" table="t_emp" lazy="false">
List empList = query.list();
在FALSE情况下,hibernate会把所有数据装入list
Iterator it = query.iterate(); 这里 hibernate会先查询所有的主键 装入it 然后执行第一条sql语句 让指针指向迭代器的第一个元素,即需要查询第一个元素的数据.
5.<many-to-one name="dept" class="domain.Dept" column="dept_id" />
此方式将在emp中引用到dept对象 产生多对一的效果
6.
<set name="emps" cascade="delete">
<!--delete, save-update, delete-orphan-->
<key column="dept_id" />
<one-to-many class="domain.Emp" />
</set>
这里在Dept中有emp的集合set, cascade是级联属性
delete: session.delete(session.load(Dept.class, "001"));//这样就删除了所有和Dept有关的emp
若是使用iterator.remove() 仅仅是吧Dept_id修改为null 此记录成为孤儿
7.delete-orphan:
Dept dept = (Dept) session.load(Dept.class, "002");
Set set = dept.getEmps();
Iterator it = set.iterator();
while (it.hasNext()) {
Emp emp = (Emp) it.next();
if ("director".equals(emp.getPosition())) {
it.remove();
}
}
此方法将把满足条件的孤儿删除.
8.save-update: 当向集合里add一个新的emp的时候,会向数据库中插入一条新的数据
9.组合映射
<hibernate-mapping package="domain">
<class name="User" table="user" lazy="false">
<id name="id" type="integer">
<generator class="identity" />
</id>
<property name="name" />
<component name="mailAddress" class="Address">
<property name="city" column="address_city" type="string" />
<property name="street" column="address_street" type="string" />
</component>
</class>
</hibernate-mapping>
以上xml给出了一个组合映射的例子,在程序中也许是几个对象,但是在数据库中就只有一个表
在user里有一个address的对象属性 在配置时需要component标签对hibernate进行说明
10.继承映射
hibernate能自动帮助我们对复杂关系的对象进行数据库的处理
比如Question下的两个子类EasyQuestion和ChoiceQuestion都是共享一张数据库表
id name question_type question_choice
由type来判断是某种问题,下面就是一个配置好的Question.hbm.xml文件
<hibernate-mapping package="domain">
<class name="Question" table="question" lazy="false">
<id name="id" type="integer">
<generator class="identity" />
</id>
<discriminator column="question_type" type="string" />
<property name="name" />
<subclass name="EssayQuestion" discriminator-value="e">
</subclass>
<subclass name="ChoiceQuestion" discriminator-value="c">
<property name="option" column="question_option" type="string" />
</subclass>
</class>
</hibernate-mapping>
其中我们会告诉hibernate一个分支点
<discriminator column="question_type" type="string" />
由这个的column内容来判定需要用哪个类来封装数据
在subclass中来指定判定条件和封装类
ChoiceQuestion cq = new ChoiceQuestion();
cq.setName("Java是不是微软的产品");
cq.setOption("是;不是;以上都对;以上都不对");
session.save(cq);
hibernate会根据配置文件来保存type和内容
取也是同理
使用继承映射方便了很多操作,例如
Question q1 = (Question)session.load(Question.class, 2);
Question q2 = (Question)session.load(Question.class, 3);
System.out.println(q1);
System.out.println(q2);
分享到:
相关推荐
hibernate笔记整理hibernate笔记整理hibernate笔记整理hibernate笔记整理
学习hibernate框架时,整理的笔记,对hibernate框架有全面的介绍
hibernate jar包整理,新手上路
Hibernate知识整理.doc Hibernate知识整理.doc
尚学堂hibernate学习笔记(原版整理),配合视频教程使用
来自于某著名老师的整理文档,非常权威,清晰明了,欢迎各位下载
全方位学习hibernate必备,这是本人学习过程中整理的笔记。相信可以对你的hibernate学习有所帮助!
Hibernate开发实战讲解(源代码)源码整理
学习hibernate框架笔记整理和自己对hibernate认知,相互学习
hibernate整理1
hibernate 通用方法 增、删、改、查等。
最新整理的hibernate-configuration的dtd文件,欢迎大家下载!最新整理的hibernate-configuration的dtd文件,欢迎大家下载!
该压缩包里面是本人整理的,hibernate开发所依赖的基本jar包,普通hibernate开发,导入这些jar包就够了,环境可以顺利搭建。希望对大家有用!
我培训用的 Hibernate课件, 个人能力范围内精心整理,图文并茂. 希望能对大家学习 Hibernate 提供帮助. 这是第一篇, 内容如下: 了解基于B/S的三层架构; 了解持久化层-O/R Mapping ;理解Java持久化层技术Hibernate; ...
自己整理的hibernate4.3.5 core参考文档,详细的开发文档,chm格式,看着更加方便
NULL 博文链接:https://137459045.iteye.com/blog/1378543
整理出来的Hibernate标签 大家看看 提提意见 可以留言给我 我会及时更新
最新整理的hibernate-mapping的dtd文件!欢迎大家下载!最新整理的hibernate-mapping的dtd文件!欢迎大家下载!
hibernate课程笔记.doc,传智老师的用的笔记,个人也在整理过,对于初学者来说很实用。