Hibernate
文章平均质量分 80
openBlog
openBlog
展开
-
数据库事务与隔离级别
1.数据库事务的概念:•事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。例如,Tom到银行办理转账事务,把100元钱转到Jack的账号上,这个事务包含以下操作行为:–(1)从Tom的账户上减去100元。–(2)往Jack的账户上增加100元。•显转载 2014-04-29 03:03:26 · 494 阅读 · 0 评论 -
Hibernate乐观锁与悲观锁
1、Pessimistic Locking 悲观锁:它指的是对数据被外界修改持保守态度。假定任何时刻存取数据时,都可能有另一个客户也正在存取同一笔数据,为了保持数据被操作的一致性,于是对数据采取了数据库层次的锁定状态,依靠数据库提供的锁机制来实现。基于jdbc实现的数据库加锁如下: select * from account where name="mary" fo转载 2014-04-29 03:04:16 · 357 阅读 · 0 评论 -
Hibernate映射Set
Hibernate映射Set,其中Set集合中可以放我们自定义的类,也可以是像String、Long、Date等能够直接映射到数据库表字段上的类型,后者相对来说比较简单。以Team类为例:[java] view plaincopypackage bean; import java.util.Set; public class Team { pr转载 2014-04-29 03:01:51 · 418 阅读 · 0 评论 -
Hibernate对象状态
在hibernate中有三种状态:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。通过自己在网上的搜索,也了解到,这三种状态也可以称作:临时状态、持久状态、游离状态。一、三种状态介绍:(1) 瞬时状态:由new操作转载 2014-04-19 13:13:10 · 381 阅读 · 0 评论 -
Hibernate笔记(二)
性能优化延迟加载(lazy):当需要的时候加载,控制sql语句的发出时间来提高性能1、session.load方法产生的是代理对象2、session.load方法产生的对象只不过是一个空壳子当真正加载属性的时候才要发出sql语句 1、类的延迟加载 只针对一般属性,不针对(标示符、集合、引用) 2、集合的延迟加载原创 2014-04-20 01:39:12 · 418 阅读 · 0 评论 -
Hibernate —— HQL与QBC的区别
Hibernate主要有如下几种查询方式:导航对象图检索方式根据己经加载的对象,导航到其他对象。 OID检索方式按照对象的OID来检索对象。 HQL检索方式使用面向对象的HQL查询语言。HQL(Hibernate QueryLanguage) 是面向对象的查询语言,它和SQL查询语言有些相似。在Hibernate提供的各种检索方式中,HQL是使用最广转载 2014-04-20 00:11:27 · 633 阅读 · 0 评论 -
Hibernate笔记(一)
hibernate-基础部分1、jdbc的缺点:1、代码比较麻烦2、不是面向对象编程3、如果碰到一个很复杂的需求分析,需要很次很数据库交互,这样效率比较低4、jdbc技术没有做到数据的缓存2、hibenrnate1、面向对象的编程2、缓存一级缓存 二级缓存 查询缓存3、代码操作比较简单4、如果该项目对sql的优化要求特别高,不适合用原创 2014-04-20 01:37:03 · 517 阅读 · 0 评论 -
Hibernate一对多双向关联
以Customer和Order为例:一个顾客可以有多个订单,一张订单对应一个顾客。并且知道某顾客时就知道其所有的订单,得到一张订单时可以由其知道消费该订单的顾客。(1)持久化类Customer和Order的关系:(2)数据库中表的关系:(3)持久化类: 持久化类Customer转载 2014-04-29 02:53:59 · 368 阅读 · 0 评论 -
Hibernate继承映射与多态查询
一、继承映射:关系数据库的表之间不存在继承关系,为了把域模型的继承关系映射到数据库中,Hibernate提供了以下三种对继承关系映射的方法:每个子类一张表一张表存储继承体系中所有类的信息(该表由继承体系中所有类的属性的并集所映射的字段组成)公共信息放在父类表中,独有信息放在子类表中,每个子类对应一张表,并且子类表通过外键与父类表关联以Person类和转载 2014-04-29 02:15:22 · 864 阅读 · 0 评论 -
Hibernate事件系统及监听器
1.Hibernate事件系统(Event System)及监听器•如果需要响应持久层的某些特殊事件,你也可以使用Hibernate的事件框架。 该事件系统可以用来替代拦截器,也可以作为拦截器的补充来使用。•基本上,Session接口的每个方法都有相对应的事件。比如 LoadEvent(对应session.load()方法),FlushEvent(对应session.flush转载 2014-04-29 02:42:51 · 535 阅读 · 0 评论 -
Hibernate联合主键映射
1.联合主键的映射规则1) 类中的每个主键属性都对应到数据表中的每个主键列。Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法,重写这两个方法的原因在于Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hash转载 2014-04-29 02:51:50 · 412 阅读 · 0 评论 -
Hibernate检索对象的方式
Hibernate提供的检索对象的方式有:•导航对象图检索方式–根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用了延迟加载检索策略,那么首次执行此方法时,Hibernate会从数据库中加载关联的Order对象,否则就从缓存中取得Order对象转载 2014-04-29 03:12:05 · 1394 阅读 · 0 评论 -
Hibernate组件映射
在Hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),component是一个被包含的对象,它作为值类型被持久化,而非一个实体。下面举两个例子说明其使用和配置:1.以User和Address为例,一个User有id(Long类型)、name(String类型)、address地址(Address类型),其中Address类中没有i转载 2014-04-29 03:10:27 · 458 阅读 · 0 评论 -
Hibernate自身双向一对多关联
自身双向一对多关联其实是双向一对多(如CustomerOrder)的特殊情况,以Category为例:(1)Category类的类框图:(2)CATEGORIES表的结构:(3)持久化类Category:package Bean;import java.util.Set; publicclassCategory { private Longid转载 2014-04-29 02:53:19 · 361 阅读 · 0 评论 -
Hibernate检索(抓取)策略
* 检索(抓取)策略1)区分立即检索和延迟检索 class 标签中lazy=false 立即检索 class 标签中lazy=true 延迟检索2)区分类级别和关联级别的检索 类级别检索:直接加载目标对象 Customer c = session.get(Customer.class,1); 关联级别:由加载到的对象导航到其他对象原创 2014-04-15 00:01:23 · 456 阅读 · 0 评论 -
OpenSessionInView总结
OpenSessionInView模式的起源:OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的S原创 2014-05-01 23:29:56 · 472 阅读 · 0 评论 -
DetachedCriteria多表查询
一点点的在深入Hibernate,遇到的问题,我需要都记录下来,这次使用DetachedCriteria多表查询的问题,网上写的都只是一个片段,这导致了对一些问题理解的偏差。数据库中有两张表Person,Room,由于是测试程序,未设外键,也未在映射文件中加入两个对象之间的关联属性,如,只是在写列子的时候用hql实现了两个对象之间的关联,类似想实现这样的sql:select p.id,p.na原创 2014-05-02 01:49:42 · 2275 阅读 · 0 评论 -
Hibernate多对多双向关联
以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取;持久化类Student:[java] view plaincopypackage bean; import java.util.Set; public class Student { private long id; private String转载 2014-04-29 03:08:35 · 387 阅读 · 0 评论 -
Hibernate缓存简介及领域对象的三种状态
1. Session级别的缓存又叫做一级缓存;SessionFactory级别的缓存叫做二级缓存。2.理解Session的缓存:•当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中转载 2014-04-29 03:07:37 · 396 阅读 · 0 评论 -
Hibernate映射Map
Hibernate映射Map,比较简单的情况就是Map的value为String、Long、Date等Hibernate支持的类,较为复杂的就是自定义的类。下面介绍映射Map时这两种情况,至于更加复杂的情况以后再说。以Team类为例:1.简单情况:Team中含有类型为Map的students属性,Long对应学生的学号,String对应学生的姓名。Team类如下:[java]转载 2014-04-29 03:02:30 · 429 阅读 · 0 评论 -
Hibernate映射List
Hibernate映射List,其中List中的元素可以是String、Long、Date等可以直接映射到字段上的java类型,较为复杂的就是List中的元素的类型为我们自定义的类型。以Team类为例:(1)映射的List中的元素为我们自定义的Student类型:持久化类Team:[java] view plaincopypackage bean; i转载 2014-04-29 02:57:41 · 421 阅读 · 0 评论 -
Hbernate的主配置文件hibernate.cfg.xml
hibernate.cfg.xml存放在src目录下,在添加Myeclipse对Hibernate的支持时可选择是否自动生成,也可手动添加。xmlversion='1.0'encoding='UTF-8'?>DOCTYPEhibernate-configuration(根元素)PUBLIC "-//Hibernate/Hibernate Configuration D转载 2014-04-29 02:55:41 · 621 阅读 · 0 评论 -
Hibernate一对一双向关联
一对一映射有两种方式:主键关联和外键关联。以User类和IdCard类为例,用户和身份证是一对一的双向关联关系。持久化类User:[java] view plaincopypublic class User { private Long id; private String name; private IdCard idCard;转载 2014-04-29 02:50:25 · 570 阅读 · 0 评论 -
Hibernate自动建表
hibernate的自动建表功能可以给我们提供很大的便利,本人参考网络资料及编码实践整理如下:1:只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表update update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列(并且表中原来的数据不会丢失)(注:若表里有多余的转载 2014-04-29 02:54:58 · 624 阅读 · 0 评论 -
Hibernate源码分析
这段时间本人利用空闲时间解读了一下Hibernate3的源码,饶有收获,愿与大家共享。 废话不多说,首先我们先对Hibernate有一个大致的印象l 设计模式Hibernate=监听器,实际上是回调l Hibernate3支持拦截器 Hibernate配置方面的大原则:l bhn.xml文件所有配置都是描述本实体,除了cascade描述级联,即如何将本实体的操作(转载 2014-04-17 00:01:40 · 509 阅读 · 0 评论 -
Hibernate查询结果排序
1.对于一般的查询排序,可以使用HQL语句,例:Student类有两个属性id和name,对应表中的字段分别为id和NName;查询表中的所有记录并按name升序排序[java] view plaincopyQuery q=session.createQuery("from Student order by name asc"); L转载 2014-04-29 03:08:02 · 820 阅读 · 0 评论 -
Hibernate 事物隔离级别
一、数据库事务的定义二、数据库事务并发可能带来的问题三、数据库事务隔离级别四、使用Hibernate设置数据库隔离级别五、使用悲观锁解决事务并发问题六、使用乐观锁解决事务并发问题 Hibernate事务与并发问题处理(乐观锁与悲观锁)一、数据库事务的定义 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事转载 2014-05-26 23:54:37 · 584 阅读 · 0 评论