Hibernate Object Persistence

转载 2012年03月30日 11:52:53

上篇文章讲到了Java  Persistence API(Java 数据持久化API),hibernate作为JPA的一种实现,是一个数据持久化组件。所谓对象持久化(Object Persistence),就是把数据保存在永久存储介质中(数据库)。

1.为什么要持久化:

a.内存是暂时存储设备,断电后数据易丢失

b.网络传输无法传输内存中的对象,需要将对象外化

c.内存中数据查询,组织不方便

d.内存只能存储少量数据

2.怎样持久化

a.对象序列化 –> 二进制流;合并存储,粒度大,无规律;不支持检索只适合少数个别对象的序列化

b.用JDBC/EJB/ORM 将数据存入数据库

1) 用JDBC:(Java DB Connection)

优点:底层开发,控制力强(细); 效率最高; 标准的(SQL)JDBC,有可移植性

缺点:过于复杂; 代码量大; 可维护性差(代码重用性低);

2)用EJB:(Entity Java Bean)

优点:直接自动生成JDBC代码; 持久对象(PO)的状态由服务器管理; 声明式的事务

缺点:功能不全(特殊的组件,不能做继承关系); EJB容器是侵入性容器,失去OO的优点; 调试更复杂

3)用ORM:(object relation mapping)对象关系映射

优点:自动生成JDBC(代码量下降); 使用(plain oldest java object—pojo),非侵入型; 提供状态管理; 难度下降,不需要容器

缺点:由于开源, 文档少; bug多; 技术支持差

结论: 用java开发–>必须将数据持久化–>用数据库持久化–>须用ORM–>需要用Hibernate

3.Hibernate是如何实现ORM的功能?

在使用Hibernate实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件(*.hbm.xml)以及数据库配置文件(*.properties或*.cfg.xml),它们各自的作用如下。
⑴映射类:它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象。
⑵映射文件:它的作用是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
⑶数据库配置文件:它的作用是指定与数据库连接时需要的连接信息,比如连接哪中数据库、登录用户名、登录密码以及连接字符串等。

在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据库配置文件为Properties格式或者是XML格式。Hibernate就是通过解析这些文件,实现Java对象到数据库实体的映射。

5.Hibernate 中Java对象的状态
1.临时状态 (transient)
特征:
1】不处于Session 缓存中
2】数据库中没有对象记录
Java如何进入临时状态
1】通过new语句刚创建一个对象时
2】当调用Session 的delete()方法,从Session 缓存中删除一个对象时。

2.持久化状态(persisted)
特征:
1】处于Session 缓存中
2】持久化对象数据库中设有对象记录
3】Session 在特定时刻会保持二者同步
Java如何进入持久化状态
1】Session 的save()把临时-》持久化状态
2】Session 的load(),get()方法返回的对象
3】Session 的find()返回的list集合中存放的对象
4】Session 的update(),saveOrupdate()使游离-》持久化
3.游离状态(detached)
特征:
1】不再位于Session 缓存中
2】游离对象由持久化状态转变而来,数据库中可能还有对应记录。
Java如何进入持久化状态-》游离状态
1】Session 的close()方法
2】Session 的evict()方法,从缓存中删除一个对象。提高性能。少用。

Java Persistence with Hibernate中文版Hibernate实战第2版出版

Java Persistence with Hibernate中文版Hibernate实战第2版出版 图灵出版社官方Hibernate实战(第2版)链接为: http://www.turingboo...
  • YuLimin
  • YuLimin
  • 2008年03月26日 21:31
  • 5263

Java Persistence with Hibernate中文版Hibernate实战第2版勘误

http://www.javaeye.com/topic/179802Hibernate Spring Java Persistence API EJB3 相关的术语及关键字 还有其它相关的一些链接:...
  • YuLimin
  • YuLimin
  • 2008年04月06日 11:09
  • 2258

Persistence 与HibernatePersistence详解

javax.persistence.Persistence暴露出来了两个方法: public static EntityManagerFactory createEntityManagerFac...
  • u012358984
  • u012358984
  • 2013年11月24日 21:27
  • 2799

Hibernate异常:NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/

Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/...
  • mingming_vip
  • mingming_vip
  • 2015年07月08日 14:23
  • 2293

IDEA中Hibernate找不到Persistence窗口

在引入Hibernate的Jar包后,根据数据库中的表生成实体类,需要找到Persistence窗口再进行操作,可是找不到这个窗口怎么办?打开Projuct Structure面板—>Modules—...
  • plain_maple
  • plain_maple
  • 2017年04月13日 19:41
  • 3187

JPA No Persistence provider for EntityManager named..求解释

在使用JPA开发EJB的时候报的错,总是说找不到我命名为“sample”的Persistence -unit 各位大牛,伸伸援手帮忙看看....... 11:03:57,790 WARN  [Pe...
  • liruichuan
  • liruichuan
  • 2013年05月24日 11:06
  • 3352

Hibernate5.1.fianl使用JPA注解方式异常:persistence.Table.indexes()[Ljavax/persistence/Index;

之前开发时我用的是配置文件的方式,实现实体类和数据库中数据的映射关系,后来看到也有注解的方式,也比较方便,就想试试,去Hibernate官网下载了最新版的Hibernate5.1.final版本,直接...
  • wangyang1354
  • wangyang1354
  • 2016年02月16日 17:01
  • 2784

'Basic' attribute type should not be a persistence entity/a container

在使用IDEA进行HIbernate开发时,从datasource得到的实体映射并不理想,需要手动更改。 在向实体类添加属性的Setter时,暂时会有红色tip:'Basic' attribute ...
  • u010102162
  • u010102162
  • 2014年11月08日 19:16
  • 5630

持久化persistence.xml配置文件

在EJB中,一个实体Bean应用由实体类和persistence.xml文件文件组成。persistence.xml文件在jar文件的META-INF目录下。persistence.xml文件指定实体...
  • happylee6688
  • happylee6688
  • 2014年01月22日 12:14
  • 13414

JPA Hibernate 使用UUID做为主键的问题

当使用UUID类型的数据作为主键的时候,务必使id的数据类型为String而不是UUID,比如 应该写为:@Id @GenericGenerator(name = "system-uuid", st...
  • yutuyinchan
  • yutuyinchan
  • 2017年06月25日 20:42
  • 1017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate Object Persistence
举报原因:
原因补充:

(最多只允许输入30个字)