知识大全 Hibernate3.X 实践总结
Posted 知
篇首语:落花踏尽游何处,笑入胡姬酒肆中。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate3.X 实践总结相关的知识,希望对你有一定的参考价值。
Hibernate3.X 实践总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Hibernate X 实践总结
Hibernate不是盏省油的灯 也不是想像的射来射去很简单的事 有很多细节处理不好会让你很不舒服的 这方面最突出的表现在两方面 一是事务管理 是JTA事务还是JDBC事务?幸亏有了Spring和J EE容器 二是胡乱映射 模型关系建立不合理或者错误导致 或者是映射策略和技术不过关导致 这样的最终结果是抛出一堆HibernateException 摸不著头脑 下面是我实践中的一些总结作为备忘录写出来
参考的是最新的Hibernate GA API文档 还吸收了Hibernate牛人(夏新)写的书和翻译中文开发手册的精华
Configuration/SessionFactory/Session Configuration实例代表了一个应用程序中Java类型 到SQL数据库映射的完整集合 Configuration被用来构建一个(不可变的 (immutable))SessionFactory SessionFactory是线程安全的 创建代价很高 Session是非线程安全的 轻量级的 一个Session对应一个JDBC连接 Session的connection()会获取Session与之对应的数据库连接Connection对象 Session的功能就是操作对象的 这些对象和数据库表有映射关系 Session操作的对象是有状态的 分三类
自由状态(transient): 未持久化 未与任何Session相关联 数据库表中没有对应的记录 持久化状态(persistent): 与一个Session相关联 对应数据库表中一条记录 游离状态(detached): 已经进行过持久化 但当前未与任何Session相关联 数据库表中曾经有一条记录 现在还有没有就不知道了
游离状态的实例可以通过调用save() persist()或者saveOrUpdate()方法进行持久化 持久化实例可以通过调用 delete()变成游离状态 通过get()或load()方法得到的实例都是持久化状态的 游离状态的实例可以通过调用 update() saveOrUpdate() lock()或者replicate()进行持久化 游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例
Session的save()/persist()/update()/saveOrUpdate()/merge()/delete()方法 save()方法将指定对象保存 插入表中一条数据 persist()方法将指定对象保存 插入表中一条数据 我还没发现它和save方法有什么特别之处 replicate()方法完全使用给定对象各个属性的值(包括标识id)来持久化给定的游离状态(Transient)的实体 很暴力啊 其中还需要指定存储模式(有四种保存策略供选择) update()方法将指定对象更新 更新表中一条数据 saveOrUpdate()方法接收一个实体对象 根据实体对象的id判断是否已经存在进行保存或更新操作 这样保存和更新方法就统一了 merge()方法将给定的对象的状态复制到具有相同标识的持久化对象上 delete()方法将指定对象删除 删除表中一条数据
特别注意 为了使用saveOrUpdate()方法 在由定义映射文件时 通过设定<id>标签的unsaved value= null 来判断执行什么操作 当id属性等于unsaved value的值(在此为null)时 则认为还没有保存 应该执行保存操作 否则执行更新操作 这样设定之后 可以使用saveOrUpdate()方法来统一保存和更新的方法
<id name= id column= id type= java lang Integer unsaved value= null > <generator class= native /> </id>
unsaved value可以设定的值有四个 any 总是储存 none 总是更新 null id为null时储存(预设) valid id为null或是指定值时储存
Session的get()/load()方法 get()方法会总是查询实体对象 不存在时候返回null load()方法也是获取一个实体对象 不存在时候抛空指针异常
Session的clear()/evict()方法 clear()方法清除Session级别缓存中的所有实体(包括各种状态)对象 目的是释放内存 evict()方法清除Session级别缓存中的指定的实体(包括各种状态)对象 当然 Session关闭后 这些缓存也就不存在了 会等待JVM回收
Session的flush()方法 flush()强制持久化Session缓存中的实体对象 一般还会调用clear()或evict() 目的是赶紧保存 释放宝贵内存资源
Session的mit()/rollback()方法 mit()方法用于提交Session上的事务 否则工作单元不会对数据库产生影响 如果执行出现异常(也就是mit()失败了) 则之前的操作取消 执行rollback()可撤消之前的操作
Session的close()/isOpen()/isConnected()/reconnect()方法 close()方法关闭Session所对应数据库连接 与其相关联的对象生命周期结束 isOpen()方法检查Session是否仍然打开 如果Session已经断开 则可以使用reconnect(Connection connection)来重新让Session关联一个JDBC连接 isConnected()方法检查当前Session是否处于连接状态
Criteria DetchedCriteria和Query接口 Criteria和Query的实例都是和Session绑定的 其生命周期跟随着Session结束而结束 DetchedCriteria实例相当于一个SQL模板 目的是为了复用 其中的getExecutableCriteria(session)方法接收一个Session对象 并与之绑定 返回一个Criteria对象
Hibernate类的initialize()方法 initialize()方法强制Hibernate立即加载指定实体所关联的对象和集合 Hibernate类中还有其他几个很有用但不适很常用的方法
映射文件中的lazy属性 在Hibernate 中 class元素的lazy属性默认是true 如果不需要 则需要显示指定为lazy= false 否则 操作load返回的对象会抛异常 另外Hibernate 中还可以为实体属性指定lazy属性
JDBC事务和JTA事务 Hibernate本身没有事务管理功能 它依赖于JDBC或JTA的事务管理功能 在Hibernate配置文件中 如果不显式指定Transaction的工厂类别属性hibernate transaction factory_class的配置 则默认为JDBC事务 <property name= hibernate transaction factory_class > hibernate transaction JDBCTransactionFactory</property> 在通过SessionFactory获取到Session后 与Session相关联的JDBC Connection实例就被设定为false
特别注意 如果数据库不支持事务 比如MySQL的MyISAM引擎的表就不支持事务 声明事务也不会起作用 要使MySQL 的表支持事务 则可以指定表的引擎类型为InnoDB 如果是学习或者研究 目前最好还是使用PostgreSQL 或DB Oracle
JDBC事务总是和一个数据库连接(或一个Session)相关联的 JTA事务则可以跨越多个数据连接(或多个Session) 这些连接还可以是不同数据库的连接 JTA事务一般由容器进行管理 编程只要在多个操作单元的开始和结束定义JTA事务的边界即可
cha138/Article/program/Java/ky/201311/28559相关参考
1、曝气过度很不利于污泥培养的。微生物的量和源水中的碳氢含量有关,碳氢不足和难提高微生物数量,特意提高微生物数量将会使污泥老化,反而不利于出水水质。根据F/M值的大小,可以知道微生物数量是否太低,该值
1、曝气过度很不利于污泥培养的。微生物的量和源水中的碳氢含量有关,碳氢不足和难提高微生物数量,特意提高微生物数量将会使污泥老化,反而不利于出水水质。根据F/M值的大小,可以知道微生物数量是否太低,该值
1、曝气过度很不利于污泥培养的。微生物的量和源水中的碳氢含量有关,碳氢不足和难提高微生物数量,特意提高微生物数量将会使污泥老化,反而不利于出水水质。根据F/M值的大小,可以知道微生物数量是否太低,该值
上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?
84、上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?(1)勤看:凡能够判断机电设备是否处于正常情况的设备外观现象,以及水位、天气、环境等属于看的范围1)电压表数值是否在额定范围内(±1
上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?
84、上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?(1)勤看:凡能够判断机电设备是否处于正常情况的设备外观现象,以及水位、天气、环境等属于看的范围1)电压表数值是否在额定范围内(±1
上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?
84、上海泵站管理工人曾经通过实践总结出的泵站管理六勤工作法是什么?(1)勤看:凡能够判断机电设备是否处于正常情况的设备外观现象,以及水位、天气、环境等属于看的范围1)电压表数值是否在额定范围内(±1
《内经》综合了中国古代在天文历法、地理学以及气象学等领域的科学技术知识,形成了比较科学的理论总结: (1)天文历法: ①天文学:天文学的知识与方法不仅影响《内经》学术体系的形成,称为“天人合一”内
科学发展观,是立足社会主义初级阶段基本国情,总结我国发展实践,借鉴国外发展经验,适应新的发展要求提出来的。科学发展观的提
科学发展观,是立足社会主义初级阶段基本国情,总结我国发展实践,借鉴国外发展经验,适应新的发展要求提出来的。科学发展观的提出,体现的哲学道理是_____。A、社会意识是对社会存在的反映B、实践是获得认识
从几代航天人的实践经验中概括总结出来的中国航天精神是“自力更生,艰苦奋斗,大力协同,无私奉献”。这种精神,是我们中华民族
从几代航天人的实践经验中概括总结出来的中国航天精神是“自力更生,艰苦奋斗,大力协同,无私奉献”。这种精神,是我们中华民族最宝贵的精神财富,是我们战胜一切艰难险阻、不断夺取胜利的力量源泉。这说明____
理论与实践哪个重要实践是检验真理的唯一标准。任何经不住实践检验的都是靠不住的!实践出真知,有时只有实践了,才能真正掌握,否则就是纸上谈兵!理论是从实践中总结出来的,用于进一步指导实践的正确的道理,可以