基于Java的开源Hibernate对象关系映射解决方案,面向.NET环境对象持久化类库NHibernate正式发布了2.0版。开发者表示它已经堪比Hibernate
3.2,而且有许多Hibernate不具有的特性。下载

1.2.2 三种持久化对象的状态:
Transient瞬时态:
特点:持久化对象没有唯一标识OID.没有纳入Session的管理.

Persistent持久态:
特点:持久化对象有唯一标识OID.已经纳入到Session的管理.

***** 结论:持久化持久态对象有自动更新数据库的能力.
Detached脱管态:
特点:持久化对象有唯一标识OID,没有纳入到Session管理.

Transaction
对象

 

1.5.7 Hibernate的多对多的配置:
第一步:创建实体类:
学生的实体:
public class Student {
    private Integer sid;
    private String sname;
    // 一个学生选择多门课程:
    private Set<Course> courses = new HashSet<Course>();
    public Integer getSid() {
        return sid;
    }
    public void setSid(Integer sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Set<Course> getCourses() {
        return courses;
    }
    public void setCourses(Set<Course> courses) {
        this.courses = courses;
    }

}
课程的实体:
public class Course {
    private Integer cid;
    private String cname;
    // 一个课程被多个学生选择:
    private Set<Student> students = new HashSet<Student>();
    public Integer getCid() {
        return cid;
    }
    public void setCid(Integer cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public Set<Student> getStudents() {
        return students;
    }
    public void setStudents(Set<Student> students) {
        this.students = students;
    }

}

第二步建立映射:
Student.hbm.xml
<hibernate-mapping>
    <class name="cn.itcast.hibernate3.demo3.Student" table="student">
        <!-- 配置唯一标识 -->
        <id name="sid" column="sid">
            <generator class="native"/>
        </id>
        <!-- 配置普通属性 -->
        <property name="sname" column="sname" length="20"/>

        <!-- 配置关联映射 -->
        <!-- <set>标签 name:对应学生中的课程集合的名称   table:中间表名称. -->
        <set name="courses" table="stu_cour">
            <!-- <key>中column写 当前类在中间表的外键.-->
            <key column="sno"></key>
            <!-- <many-to-many>中class:另一方类的全路径. column:另一方在中间表中外键名称-->
            <many-to-many class="cn.itcast.hibernate3.demo3.Course" column="cno"/>
        </set>
    </class>
</hibernate-mapping>

Course.hbm.xml
<hibernate-mapping>
    <class name="cn.itcast.hibernate3.demo3.Course" table="course">
        <!-- 配置唯一标识 -->
        <id name="cid" column="cid">
            <generator class="native"/>
        </id>
        <!-- 配置普通属性 -->
        <property name="cname" column="cname" length="20"/>
        <!-- 配置与学生关联映射 -->
        <!-- <set>中name:对应当前类中的学生的集合的名称  table:中间表的名称-->
        <set name="students" table="stu_cour">
            <!-- <key>中column:当前类在中间表中外键 -->
            <key column="cno"></key>
            <!-- <many-to-many>中class:另一方的类全路径. column:另一方在中间表中外键名称 -->
            <many-to-many class="cn.itcast.hibernate3.demo3.Student" column="sno"/>
        </set>
    </class>
</hibernate-mapping>

第三步:将映射文件加入到核心配置文件中:

Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。

目录:

  1. Hibernate 系列 01 – 框架技术
    (介绍Hibernate框架的发展由来)
  2. Hibernate 系列 02 –
    Hibernate介绍及其环境搭建
  3. Hibernate 系列 03 –
    使用Hibernate完成持久化操作
  4. Hibernate 系列 04 – Hibernate
    配置相关的类
  5. Hibernate 系列 05 – Session
  6. Hibernate 系列 06 –
    对象在JVM中的生命周期 
  7. Hibernate 系列 07 –
    Hibernate中Java对象的三种状态
  8. Hibernate 系列 08 –
    对象识别机制
  9. 对象关联关系(更新中…)

 

1.3.4 Hibernate管理一级缓存:
一级缓存是与session的生命周期相关的.session生命周期结束,一级缓存销毁了.
* clear()/evict()/flush()/refresh()管理一级缓存.
* clear()           :清空一级缓存中所有的对象.
* evict(Object obj) :清空一级缓存中某个对象.
* flush()           :刷出缓存.
* refresh(Object obj):将快照区的数据重新覆盖了一级缓存的数据.
#####1.3.5  Hibernate一级缓存的刷出时机:(了解.)
FlushMode:
* 常量:
* ALWAYS        :每次查询的时候都会刷出.手动调用flush.事务提交的时候.
* AUTO      :默认值.有些查询会刷出.手动调用flush.事务提交的时候.
* COMMIT        :在事务提交的时候,手动调用flush的时候.
* MANUAL        :只有在手动调用flush才会刷出.

严格程度:MANUAL > COMMIT > AUTO > ALWAYS

Criteria
对象

欧博国际平台 1

1.4 操作持久化对象的方法:

save():
保存一条记录:将瞬时态对象转成持久态对象.
update()
更新一条记录:将脱管态对象转成持久态对象.
在<class>标签上设置select-before-update="true"在更新之前先去查询
saveOrUpdate():
根据对象状态的不同执行不同的save获得update方法.
* 如果对象是一个瞬时态对象:执行save操作.
* 如果对象是一个脱管态对象:执行update操作.
* 设置id不存在,就会报错,可以在<id>上设置一个unsaved-value=”-1”,执行保存的操作.
delete():
将持久态对象转成瞬时态.
get()/load():
获得一个持久态对象.

SessionFactory
对象

前言:

  最近也在学习Hibernate,遇到的问题差不多都解决了,顺便把学习过程遇到的问题和查找的资料文档都整理了一下分享出来,也算是能帮助更多的朋友们了。

  最开始使用的是经典的MyEclipse,后面我用的是JetBrains的IDEA了,个人比较喜欢这些快捷键。偷懒程序员必备啊,哈哈。

1.2 Hibernate的持久化类状态:

一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在
Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。

 

1.5.1 实体之间的关系:
实体之间有三种关系:
* 一对多:
* 一个用户,生成多个订单,每一个订单只能属于一个用户.
* 建表原则:
* 在多的一方创建一个字段,作为外键,指向一的一方的主键.
* 多对多:
* 一个学生可以选择多门课程,一个课程可以被多个学生选择.
* 建表原则:
* 创建第三张表,中间表至少有两个字段,分别作为外键指向多对多双方主键.
* 一对一:(特殊.最少.)
* 一个公司只能有一个注册地址,一个注册地址,只能被一个公司使用.(否则将两个表建到一个表.)
* 建表原则:
* 唯一外键:
* 一对一的双方,假设一方是多的关系.需要在多的一方创建一个字段,作为外键.指向一的一方的主键.但是在外键添加一个unique.
* 主键对应:
* 一对一的双方,通过主键进行关联.

配置对象是你在任何 Hibernate 应用程序中创造的第一个 Hibernate
对象,并且经常只在应用程序初始化期间创造。它代表了 Hibernate
所需一个配置或属性文件。配置对象提供了两种基础组件。

 

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注