Hibernate
文章平均质量分 79
jiajialin
这个作者很懒,什么都没留下…
展开
-
Hibernate的对象检索策略
Hibernate的对象检索策略分为三种:–立即检索策略–延迟检索策略–左外连接检索策略1.立即检索策略:以Customer和Order(两者为一对多关联关系)为例:List customerLists=session.createQuery("from Customer as c").list();•运行以上方法时,Hibernate将先查询C原创 2013-03-25 20:07:37 · 948 阅读 · 0 评论 -
Hibernate映射List
Hibernate映射List,其中List中的元素可以是String、Long、Date等可以直接映射到字段上的java类型,较为复杂的就是List中的元素的类型为我们自定义的类型。以Team类为例:(1)映射的List中的元素为我们自定义的Student类型:持久化类Team:package bean;import java.util.List;public cla原创 2013-03-18 11:06:39 · 13296 阅读 · 1 评论 -
Hibernate事件系统及监听器
1.Hibernate事件系统(Event System)及监听器•如果需要响应持久层的某些特殊事件,你也可以使用Hibernate的事件框架。 该事件系统可以用来替代拦截器,也可以作为拦截器的补充来使用。•基本上,Session接口的每个方法都有相对应的事件。比如 LoadEvent(对应session.load()方法),FlushEvent(对应session.flush原创 2013-03-30 16:09:27 · 6196 阅读 · 0 评论 -
数据库事务与隔离级别
1.数据库事务的概念:•事务是指一组相互依赖的操作行为,如银行交易、股票交易或网上购物。事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。例如,Tom到银行办理转账事务,把100元钱转到Jack的账号上,这个事务包含以下操作行为:–(1)从Tom的账户上减去100元。–(2)往Jack的账户上增加100元。•显原创 2013-03-28 16:48:50 · 17827 阅读 · 0 评论 -
Hibernate继承映射与多态查询
一、继承映射:关系数据库的表之间不存在继承关系,为了把域模型的继承关系映射到数据库中,Hibernate提供了以下三种对继承关系映射的方法:每个子类一张表一张表存储继承体系中所有类的信息(该表由继承体系中所有类的属性的并集所映射的字段组成)公共信息放在父类表中,独有信息放在子类表中,每个子类对应一张表,并且子类表通过外键与父类表关联以Person类和原创 2013-03-24 21:31:04 · 10590 阅读 · 5 评论 -
Hibernate组件映射
在Hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),component是一个被包含的对象,它作为值类型被持久化,而非一个实体。下面举两个例子说明其使用和配置:1.以User和Address为例,一个User有id(Long类型)、name(String类型)、address地址(Address类型),其中Address类中没有i原创 2013-03-23 19:41:09 · 5098 阅读 · 3 评论 -
Hibernate一对一双向关联
一对一映射有两种方式:主键关联和外键关联。以User类和IdCard类为例,用户和身份证是一对一的双向关联关系。持久化类User:public class User { private Long id; private String name; private IdCard idCard; //省略set、get方法}持久化类IdCard:public class原创 2013-03-23 19:37:12 · 12588 阅读 · 6 评论 -
Hibernate映射Map
Hibernate映射Map,比较简单的情况就是Map的value为String、Long、Date等Hibernate支持的类,较为复杂的就是自定义的类。下面介绍映射Map时这两种情况,至于更加复杂的情况以后再说。以Team类为例:1.简单情况:Team中含有类型为Map的students属性,Long对应学生的学号,String对应学生的姓名。Team类如下:package b原创 2013-03-17 16:13:36 · 9728 阅读 · 0 评论 -
Hibernate自身双向一对多关联
自身双向一对多关联其实是双向一对多(如CustomerOrder)的特殊情况,以Category为例:(1)Category类的类框图:(2)CATEGORIES表的结构:(3)持久化类Category:package Bean;import java.util.Set; publicclassCategory { private Long原创 2013-03-14 13:48:49 · 4160 阅读 · 0 评论 -
Hibernate一对多双向关联
以Customer和Order为例:一个顾客可以有多个订单,一张订单对应一个顾客。并且知道某顾客时就知道其所有的订单,得到一张订单时可以由其知道消费该订单的顾客。(1)持久化类Customer和Order的关系:(2)数据库中表的关系:(3)持久化类: 持久化类Customer原创 2013-03-13 22:08:10 · 1166 阅读 · 0 评论 -
Hbernate的主配置文件hibernate.cfg.xml
hibernate.cfg.xml存放在src目录下,在添加Myeclipse对Hibernate的支持时可选择是否自动生成,也可手动添加。xmlversion='1.0'encoding='UTF-8'?>DOCTYPEhibernate-configuration(根元素)PUBLIC "-//Hibernate/Hibernate Configuration原创 2013-03-13 18:36:22 · 6826 阅读 · 0 评论 -
Hibernate中的数据库方言(Dialect)
在配置hibernate.cfg.xml时需指定使用数据库的方言:例:property name="dialect">org.hibernate.dialect.MySQL5Dialectproperty>以下是各数据库对应的方言(Dialect):数据库方言(Dialect)DB2org.hibernate.原创 2013-03-15 18:12:47 · 65740 阅读 · 3 评论 -
Hibernate映射类型
Java的基本类型的Hibernate映射类型: Hibernate映射类型Java类型标准SQL类型大小和取值范围 Integer或intint或java.lang.IntegerINTEGER 4字节,-2^21~2^31-1long long或者原创 2013-03-16 10:06:16 · 4334 阅读 · 0 评论 -
Hibernate拦截器
•持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦截机制的有益补充,使得我们可以在更低层次、更广的对象范围上进行AOP操作(Spring虽然将Hibernate纳入到其容器管理的范围内,但是并没有途径实现对其实体对象的管理)。这样就允许实现某些通用的功能,以及允许对Hibernate功能进行扩展。•Interceptor接口提供了从会话(session)回调(callback)应原创 2013-03-29 20:56:35 · 3094 阅读 · 1 评论 -
Hibernate乐观锁与悲观锁
1、Pessimistic Locking 悲观锁:它指的是对数据被外界修改持保守态度。假定任何时刻存取数据时,都可能有另一个客户也正在存取同一笔数据,为了保持数据被操作的一致性,于是对数据采取了数据库层次的锁定状态,依靠数据库提供的锁机制来实现。基于jdbc实现的数据库加锁如下: select * from account where name="mary" fo原创 2013-03-28 18:59:41 · 4184 阅读 · 0 评论 -
Hibernate检索对象的方式
Hibernate提供的检索对象的方式有:•导航对象图检索方式–根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用了延迟加载检索策略,那么首次执行此方法时,Hibernate会从数据库中加载关联的Order对象,否则就从缓存中取得Order对象原创 2013-03-25 21:51:57 · 917 阅读 · 0 评论 -
Hibernate缓存简介及领域对象的三种状态
1. Session级别的缓存又叫做一级缓存;SessionFactory级别的缓存叫做二级缓存。2.理解Session的缓存:•当Session的save()方法持久化一个Customer对象时,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中原创 2013-03-25 19:08:38 · 2718 阅读 · 0 评论 -
Query的list()和iterate()方法的区别
1.Query接口的list与iterate方法:iterate()方法:Return the query results as an Iterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].Entities returned a原创 2013-03-25 19:08:09 · 13692 阅读 · 1 评论 -
Hibernate联合主键映射
1.联合主键的映射规则1) 类中的每个主键属性都对应到数据表中的每个主键列。Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法,重写这两个方法的原因在于Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hash原创 2013-03-22 14:33:32 · 31790 阅读 · 2 评论 -
Hibernate查询结果排序
1.对于一般的查询排序,可以使用HQL语句,例:Student类有两个属性id和name,对应表中的字段分别为id和NName;查询表中的所有记录并按name升序排序 Query q=session.createQuery("from Student order by name asc"); List li=(List)q.list();原创 2013-03-21 21:16:02 · 35560 阅读 · 1 评论 -
Hibernate多对多双向关联
以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取;持久化类Student:package bean;import java.util.Set;public class Student { private long id; private String name;//学生姓名 private Set courses;//该学生选择的课原创 2013-03-21 11:49:08 · 17369 阅读 · 8 评论 -
Hibernate映射Bag
Bag(结合了List与Set),可以重复且没有顺序的一种集合,是Hibernate提供的。HIbernate使用jdk的List模拟Bag。其配置与Hibernate映射List时基本相同。以Team、Student为例:持久化类Team(与映射List时相同):package bean;import java.util.List;public class Team { p原创 2013-03-18 20:04:57 · 10576 阅读 · 1 评论 -
Hibernate映射Set
Hibernate映射Set,其中Set集合中可以放我们自定义的类,也可以是像String、Long、Date等能够直接映射到数据库表字段上的类型,后者相对来说比较简单。以Team类为例:package bean;import java.util.Set;public class Team { private long id; private String name; p原创 2013-03-17 21:15:10 · 2930 阅读 · 0 评论 -
Hibernate自动建表
hibernate的自动建表功能可以给我们提供很大的便利,本人参考网络资料及编码实践整理如下:1:只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表update update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列(并且表中原来的数据不会丢失)(注:若表里有多余的原创 2013-03-12 19:38:13 · 11264 阅读 · 3 评论