Hibernate
jazwoo
这个作者很懒,什么都没留下…
展开
-
OpenSessionInViewFilter配置说明
Spring为我们解决Hibernate的Session的关闭与开启问题。 Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session原创 2013-03-27 09:10:40 · 637 阅读 · 0 评论 -
hibernate 多对多关系及其关联查询
本节内容多对多关系引入多对多映射关系多对多关联查询1.原生SQL关联查询2.HQL关联查询3.Criteria API关联查询结语多对多关系引入让我们再次回顾在第二篇中建立的数据模型:在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的“外键关系”或者称作“父子关系”、“一对多关系”和关联查询,这一篇以Order为转载 2012-09-25 23:38:33 · 1532 阅读 · 0 评论 -
Hibernate 延迟加载部分集合、集合过滤session.createFilter
1、集合过滤: 对于一个已经加载的Customer对象,假设对它的orders集合采用延迟加载机制,那么当调用customer.getOrders().iterator()时,Hibernate就会初始化orders集合,然后到数据库中去加载Customer对象所关联的Order对象,并且填充orders集合,但是很多时候我们其实只是需要关联对象中符合某些条件的一部分对象,而并不需要加原创 2012-09-25 11:25:20 · 1602 阅读 · 0 评论 -
hibernate 中lazy的使用
lazy,延迟加载Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。lazy策略可以用在:* 标签上:可以取值true/false* 标签上,可以取值true/false,这个特性需要类增强* /等集合上,可以取值为true/false/extra* e-to-one>/e>等标签上,可以取值false/proxy/no-prox转载 2012-09-12 10:12:45 · 767 阅读 · 0 评论 -
Hibernate持久化对象的生命周期
持久化对象的状态:瞬时对象(Transient Objects):使 用new操作符初始化的对象不是立刻就持久化的。他们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任 何其他对象所引用),他们的状态将会丢失,并由垃圾回收机制回收。临时对象的特征。临时对象具有以下特征:(1) 不处于Session的缓存中,也可以说,不被任何一个Se转载 2012-09-20 20:15:13 · 794 阅读 · 0 评论 -
hibernate抓取策略fetch / batch-size
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置batch-size,hibernate将会减少SQL语句的数量。 Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么hibernate将不载入其他转载 2012-09-25 10:54:12 · 1954 阅读 · 0 评论 -
hibernate 延迟加载的错误 failed to lazily initialize
这个问题一般出现在一对多的情况下,解决的方法有两种1、设置lazy=false如果是用annotation,则配置如下Xml代码 @OneToMany( targetEntity = CourseAuthorizationItem.class, cascade = {CascadeType.PERSIST, CascadeType.转载 2012-09-24 21:53:53 · 547 阅读 · 0 评论 -
hibernate 自身多对多
有个类Student,它要自己对自己进行多对多映射其中Student 类的属性有:[java] view plaincopypublic int id; public String name; public String sex; private Set children = new HashSet(); pr原创 2012-09-24 10:59:33 · 675 阅读 · 0 评论 -
hibernate分页原理
Hibernate 可以实现分页查询,例如: 从第2万条开始取出100条记录 Query q = session.createQuery("from Cat as c"); q.setFirstResult(20000); q.setMaxResults(100); List l = q.list(); 那么Hibernate底层如何实现分页的呢?实际上Hibernate的查询定义在转载 2012-09-22 20:48:45 · 847 阅读 · 0 评论 -
hibernate 解决插入时间默认不支持时分秒
今天使用hibernate往数据库中插入Date类型的数据时,结果数据库中 的时分秒全部变成的00:00:00hibernate 默认date使用的是 java.text.date格式。这种格式不支持时分秒。 解决办法:将hibernate的 pojo对应的 .hbm.xml文件中的 date类型改为java.util.date类型就可以解决了原创 2012-09-19 21:54:58 · 1006 阅读 · 0 评论 -
HibernateTemplate实现分页
Spring 整合 Hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate的回调机制扩展hibernateTemplate的功能实现分页 [java] view plaincopyprint?/** *转载 2012-12-01 15:53:20 · 545 阅读 · 0 评论 -
HibernateTemplate类的使用
/** * 向数据库添加一条对应于一个业务对象实例的记录 * * @param entity * 业务对象实例 */ public Entity create(Entity entity) throws DaoException { try { getHibernateTemplate().save(entity); return ent转载 2012-12-01 19:55:44 · 542 阅读 · 0 评论 -
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUorg.springframework.dao.InvalidDataAccessApiUsageException: Writeoperatio转载 2013-03-27 09:11:31 · 871 阅读 · 0 评论 -
解决spring整合hibernate中用junit4测试,报错object references an unsaved transient instance - save the transient
在hibernate中报错object references an unsaved transient instance - save the transient,原因分析见 http://blog.csdn.net/jazywoo123/article/details/8439043主要是关联的对象未持久化造成的。但是在spring中,测试的时候,基本上都解决了,配置文件也弄好了。原创 2013-01-12 23:00:34 · 840 阅读 · 0 评论 -
Hibernate 异常:object references an unsaved transient instance - save the transient instance before fl
hibernate中级联操作,当存储一个对象时,报错Hibernate 异常:object references an unsaved transient instance - save the transient instance before fl次在网上查阅资料,解决的方法是在主控方的 set 标签上把 cascade 属性修改为"save-update" 即可。而 ca原创 2012-12-26 14:52:05 · 1903 阅读 · 0 评论 -
Hibernate多对多hql查询
一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.要查询教拥有书"a"的学生的老师!HQL如何写呀?如何取值?class Teacher{String id;String name;Set students;}class Student{String id;String name;Set teachers;原创 2012-12-13 20:50:51 · 886 阅读 · 0 评论 -
Hibernate 映射继承关系
Hibernate提供了以下三种对继承关系映射的方法,即在继承关系树中:(1)、每个具体类(非抽象类)对应一个表:此方式中关系数据模型完全不支持对象的继承关系。(2)、基类(根类)对应一个表:此方式中对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类的字段,从而使关系数据模型可以支持继承关系。(3)、每个类对应一个表:此方式中在关系数据模型中用外键关系来表示继承关系。这三原创 2012-08-08 09:49:15 · 876 阅读 · 0 评论 -
hibernate执行sql
Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上。使用命名的SQL查询还可以将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。如果是一个新的应用,通常不要使用SQL查询。SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的转载 2012-12-06 11:33:26 · 1181 阅读 · 0 评论 -
Hibernate中Criteria的完整用法
Criteria的完整用法QBE (Query By Example)Criteria cri = session.createCriteria(Student.class);cri.add(Example.create(s)); //s是一个Student对象list cri.list();实质:创建一个模版,比如我有一个表serial有一个 giftor转载 2012-12-05 22:39:05 · 730 阅读 · 0 评论 -
hibernate 映射多对多 包含其他字段属性
Hibernate框架可以将面向关系的 数据库模型封装成面向对象的数据库模型,这样以来一方面了我们在具体应用中的数据库设计,另一方面又简化了我们的编码。然而在现实中我们往往会发现有些面 向关系的数据库模型转化成面向对象的数据库模型之后很难再Hibernate中 配置。比如:在多对多关系模型中,中间表往往含有自己的属性,这种情况在Hibernate中 该如何配置?我在网上查了好多资料都说将多对多拆成原创 2012-12-04 22:01:04 · 1011 阅读 · 0 评论 -
HibernateTemplate删除数据小结
删除DAO代码: public void delete(Integer lid) { log.debug("deleting Login instance"); try { Login login=(Login)this.getHibernateTemplate().load(Login.class,lid); ge原创 2012-12-03 19:18:09 · 1162 阅读 · 0 评论 -
让Hibernate显示SQL语句的绑定参数值
使用Hibernate提供的内置属性true只能输出类似于下面的SQL语句:Hibernate: insert into student(name, sex, age, cardId, classroom_id, id) values (?, ?, ?, ?, ?, ?) 这样不利于程序的调试,为了可以显示?占位符所代表的具体数据,需要第三方Jar包,p6spy是一个该需求的开源实原创 2012-09-19 21:06:32 · 2341 阅读 · 0 评论 -
hibernate 乐观锁与悲观锁使用
Hibernate支持两种锁机制: 即通常所说的“悲观锁(Pessimistic Locking)”和 “乐观锁(OptimisticLocking)”。 悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。 Hibernate的加锁模式有: Ø LockMo转载 2012-10-06 10:33:36 · 534 阅读 · 0 评论 -
Hibernate 事务处理
事务是指由一个或者多个SQL语句组成的工作单元,这个单元中SQL语句只要有一个SQL语句执行失败,就会撤销整个工作单元。 事务的成功取决于工作单元的所有SQL语句都执行成功,它必须具备ACID特征,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和持久性(Durability),它们的含义是:(1) 原子性:事务是不可分割的工作原创 2012-08-08 14:21:15 · 1236 阅读 · 0 评论 -
Hibernate 映射实体关联关系(二)
Hibernate关联关系映射目录│ ├─单向关联│ ├─ 一对一外键单向关联│ ├─ 一对一主键单向关联│ ├─ 一对一连接表单向关联│ ├─ 一对多外键单向关联│ ├─ 一对多连接表单向关联│ ├─ 多对一外键单向关联│ ├─ 多对一连接表单向关联│ └─ 多对多单向关联└─双向关联 ├─1 一对一外键双向原创 2012-08-08 11:01:36 · 2532 阅读 · 0 评论 -
Hibernate 映射实体关联关系(一)
Hibernate关联关系映射目录│ ├─单向关联│ ├─1 一对一外键单向关联│ ├─2 一对一主键单向关联│ ├─3 一对一连接表单向关联│ ├─4 一对多外键单向关联│ ├─5 一对多连接表单向关联│ ├─6 多对一外键单向关联│ ├─7 多对一连接表单向关联│ └─8 多对多单向关联└─双向关联 ├─原创 2012-08-08 10:44:49 · 1901 阅读 · 0 评论 -
Hibernate 检索方式
Hibernate的检索方式,主要有以下五种。 1.导航对象图检索方式。(根据已经加载的对象,导航到其他对象。) 2.OID检索方式。(按照对象的OID来检索对象。) 3.HQL检索方式。(使用面向对象的HQL查询语言。) 4.QBC检索方式。(使用QBC(Qurey By Criteria) API来检索对象。)原创 2012-08-08 00:03:35 · 825 阅读 · 0 评论 -
Hibernate 批量处理数据
当要一次事务中需要提交大量数据时,假设一次性需要向数据库中保存一百万条数据1000000,则常规的保存方式为 :Session session=null; Transaction tx=null; try{ session=this.getHibernateTemplate().getSessionFactory().openSession(); tx=session.beginT原创 2012-08-07 16:47:28 · 692 阅读 · 0 评论 -
Hibernate 操纵对象 Session用法
Session接口是Hibernate向程序提供操纵数据库的最主要接口,它提供了基本的保存、更新、删除和查询方法。它有一个缓存,保存了持久化对象,当清理缓存时,按照这些持久化对象同步更新数据库JAVA对象在JVM中的生命周期就用new语句创建一个对象是,JAVA虚拟机会为这个对象分配内存空间,只要这个对象不被任何引用变量引用,它就结束生命周期.如://创建一个Customer对原创 2012-08-07 16:11:12 · 859 阅读 · 0 评论 -
Hibernate 映射一对多关联关系
前言:在域对象(1.实体域对象2.过程域对象3.事件域对象)中,类与类之间最普遍的关系就是关联关系(还有1.依赖:类使用另一个类的方法或属性2.聚集:类聚集成整体3.一般化:类之间的继承),用它来描述一对一或多对一的数据关系建立多对一的单向关联关系类与类的多对一单向关联和关系数据库中的外键参照关系匹配.Order到Customer的多对一单向关联,在Order类中定义一个Customer类原创 2012-08-07 11:12:39 · 1004 阅读 · 0 评论 -
Hibernate 映射对象标识符(ID生成策略)
Java语言按内存地址来识别或区分一个类的不同对象,在关系数据库中按主键值来识别或区分同一个表中的不同记录,hibernate使用OID来建立内存对象与关系数据库表中记录的对应关系,OID在关系数据库表中的值是唯一的,内对中的java对象OID保存了数据库表中的主键值,确保OID的唯一性和久性,开发人员不应该让java应用程序来设定OID(很容易出现几个相同的OID),应该让数据库或者hibern转载 2012-08-07 10:15:53 · 2056 阅读 · 0 评论 -
hibernate 对象 - 关系映射
1.对象间的基本关系首先我简要阐明一下对象之间的基本关系,在这以后UML的课程中也会深入的学习。对象具有的四种基本关系: 关联关系:关联关系在设计模式中是被提倡优先使用于继承关系的。关联关系就是将一个对象做为别一个对象的成员,是一种包含的关系。 依赖关系:对与对象之间的方法的调用,不存在包含的关系。 聚集关系:这个关系原创 2012-08-06 10:01:48 · 652 阅读 · 0 评论 -
Hibernate 检索策略
1. 类级别检索策略 1.1 立即检索 1.2 延迟检索2. 一对多和多对多关联的检索策略 2.1 批量延迟和批量立即检索 2.1 迫切左外连接检索3.多对一和一对多关联的检索策略。 3.1 迫切左外连接检索 3.2延迟检索 3.3立原创 2012-08-07 23:42:53 · 608 阅读 · 0 评论 -
Hibernate 映射组成关系
在域模型中,有些类由几个部分类组成(创建部分类是因为它们是可以重用的),部分类对象的生命周期依赖于整体类对象的生命周期,这种整体与部份的关系称为聚集关系.如电脑它可以由主机器,键盘等类组成.主机箱又由显示卡,声卡等类组成.建立精粒度对象模型假如在Customer 类中有代表家庭地址以及公司的地址的属性,地址划分为省、市、街道和邮编,为了提高代码重用性,把从Customer类中抽象出原创 2012-08-08 08:35:03 · 611 阅读 · 0 评论 -
Hibernate 中的cascade和inverse
这两个属性都用于一多对或者多对多的关系中。而inverse特别是用于双向关系,在单向关系中我们并不需要。Cascade代表是否执行级联操作,Inverse代表是否由己方维护关系。Cascade属性的可能值有 all: 所有情况下均进行关联操作,即save-update和delete。 none: 所有情况下均不进行关联操作。这是默认值。 save转载 2012-09-12 10:18:49 · 418 阅读 · 0 评论 -
hibernate 泛型 DAO
Data Access Object (DAO) 是一般的J2EE项目中的一个常见的模块,在我们用一般的方法去实现DAO的过程中会发现在为每个pojo实现DAO的的时候会不断地区重复的写一些常用的方法,如update(),delete(),find()等。 为了解决以上所述的缺点,可以采用DAO用泛型实现的方法,把通用的方法抽出来放到基类中,以后为pojo实现DAO的时候转载 2012-09-11 10:02:47 · 606 阅读 · 0 评论 -
Null value was assigned to a property of primitive type setter问题分析与解决
Null value was assigned to a property of primitive type setter of bijian.model.bean.User.sexHibernate: select user0_.username as username0_0_, user0_.nickname as nickname0_0_, user0_.password as p原创 2012-09-11 23:21:18 · 707 阅读 · 0 评论 -
hibernate.dialect' must be set when no Connection available错误
初学hibernate ,今天试了一个例子但是报错 org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection availablepackage bijian.util;import org.hibernate.Session;import org.hibernate.S原创 2012-09-11 22:46:01 · 1049 阅读 · 0 评论 -
hibernate HQL查询
Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。第 15 章 HQL: Hibernate查询语言Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常转载 2012-09-19 22:31:42 · 649 阅读 · 0 评论 -
Hibernate session管理
SessionFactory负责创建Session,SessionFactory是线程安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session 实例。而Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取,则将会导致Session 数据存取逻辑混乱。1 它使用了ThreadLocal类别来建立一个 Session管理的原创 2012-08-08 15:20:20 · 642 阅读 · 0 评论