![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hibernate
文章平均质量分 76
dongruan00
这个作者很懒,什么都没留下…
展开
-
HQL总结
以个普通Users表为例: 建表语句: CREATE DATABASE `interceptor` CHARACTER SET 'utf8'; USE `interceptor`; DROP TABLE IF EXISTS `users`; create table users( id int auto_increment primary key, ...原创 2013-01-17 20:24:51 · 63 阅读 · 0 评论 -
<hibernate-mapping>标签
<hibernate-mapping schema="schemaName" (1) catalog="catalogName" (2) default-cascade="cascade_style" (3)...原创 2013-01-18 08:27:35 · 170 阅读 · 0 评论 -
Hibernate的<hibernate-mapping>中auto-import属性详解
在hibernate的实体映射文件(.hbm.xml)里,hibernate-mapping中有一个auto-import属性,默认值为true。 auto-import是什么意思呢?我们经常会写这样一个HQL语句: from User u where u.name='aa'; 绝大多数时候,这样写是不会发生问题的。 hibernate在处理这个HQL时...原创 2013-01-18 08:32:12 · 293 阅读 · 0 评论 -
hibernateTemplate中常用查询方法的使用
一、find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二、find(String queryString , Object value); 示例:this.getHibernateTemplate()....原创 2013-01-18 18:43:04 · 119 阅读 · 0 评论 -
HibernateTemplate的常用方法简介
HibernateTemplate的常用方法简介: void delete(Object entity):删除指定持久化实例 deleteAll(Collection entities):删除集合内全部持久化类实例 find(String ueryString):根据HL查询字符串来返回实例集合 findByNameduery(String ueryName):根据命名查询返回实例集合 get(...原创 2013-01-18 19:15:06 · 105 阅读 · 0 评论 -
find和iterate区别
hibernate2中Session.find()对应于3中的session.createQuery().list();hibernate2中Session.iterate()对应于3中的session.createQuery().iterate(); find和iterate区别: find方法通过一条Select SQL实现了查询操作,而iterate方法要执行多条Select SQL...原创 2013-01-18 19:36:48 · 93 阅读 · 0 评论 -
Hibernate N+1问题
Hibernate 中常会用到set,bag等集合表示1 对多的关系, 在获取实体的时候就能根据关系将关联的对象或者对象集取出, 还可以设定cacade进行关联更新和删除。这不得部说hibernate 的orm做得很好,很贴近oo的使用习惯了。 但是对数据库访问还是必须考虑性能问题的, 在设定了1 对多这种关系之后, 查询就会出现传说中的n +1 问题。 1 )1 对多,在1 方,查找得到了n...原创 2013-01-21 12:47:55 · 66 阅读 · 0 评论 -
如何解决Hibernate N+1问题
问题】什么时候会遇到N+1的问题?【备注】Hibernate默认抓取策略是fetch="select",不是fetch="join",这都是为了延迟加载而准备的。【出现情况】 1)一对多(one-to-many) ,在1的这方,通过1条sql查找得到了1个对象,由于关联的存在 ,那么又需要将这个对象关联的集合取出,所以合集数量是n还要发出n条sql,于是本来的1条sql查询变成了 1 +n条 。...原创 2013-01-29 12:48:10 · 94 阅读 · 0 评论 -
hibernate多对多双向关联
多对多双向关联:数据库中有一张students表(字段 id和name),teachers表(字段id和name) 还有一张关联表 s_t(字段id 外键stu_id(参考students表的id)和tea_id(参考teachers表的id)) 类图如下:Student中还存在一个teachers 的集合 Students.java package com.org.model;...原创 2013-09-05 17:03:41 · 71 阅读 · 0 评论 -
hibernate常见映射关系总结
首先我们了解一个名词ORM,全称是(Object Relational Mapping),即对象关系映射。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。 Hibernate在实现ORM功能的时候主要用到的文件...原创 2013-09-05 17:04:12 · 94 阅读 · 0 评论 -
Hibernate的fetch
hibernate抓取策略fetch详解一、hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join)测试用例: Student student = (Student) session.get(Student.class, 43); System.out.println("student name "+student.getName()); ...原创 2013-09-05 17:05:55 · 75 阅读 · 0 评论 -
hibernate抓取策略,batch-size的用法
hibernate抓取策略,,batch-szie在<class>上的应用 batch-size属性,可以批量加载实体类。 MyClass.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD...原创 2013-09-05 17:07:05 · 1204 阅读 · 0 评论 -
hibernate的Cascade和Inverse
cascade中文意思是“级联”,在程序中体现的就是: 如果一个实体类对象中含有另一个实体类对象的引用,我们就可以配置级联操作,相当于数据库中的外键操作的cascade。在配置cascade=“save_update”情况下,如果保存了其中一个对象,那么他里面包含的关联对象也就被存入数据库中了,当然这里仅仅是存入数据库当中。此时跟这个对象还没有发生关系,也就是在数据库表中外键还没有值。现在i...原创 2013-09-06 16:12:09 · 99 阅读 · 0 评论 -
hibernate常见异常
1.错误异常: org.hibernate.InstantiationException: No default constructor for entity: com.tks.skyproject.model.ImplementLogAttach at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.ja...原创 2013-09-06 16:13:07 · 88 阅读 · 0 评论 -
Hibernate之Query接口的uniqueResult()方法
如果查询返回多个值用list()方法 public void testQuery(){ Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); //创建SessionFactory Session sessio...原创 2013-01-17 14:09:56 · 57 阅读 · 0 评论 -
Hibernate iterate和list方法的区别
String hql = "from Student"; Query query = session.createQuery(hql); 对于这条语句的查询: List<Student> stus = query.list(); 会把所有的查询结果放到list中。一次加载到内存。 语句:select student0_.id as id3_, student0_...原创 2012-12-24 10:49:14 · 109 阅读 · 0 评论 -
Hibernate一对一主键双向关联
Person.java类 package com.org.model; public class Person { private int id; private String name; private Card card; public int getId() { return id; } public void setId(int id) { ...原创 2013-03-25 09:05:25 · 76 阅读 · 0 评论 -
Hibernate中get与load,query.list与query.iterate区别
Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于: 1.如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception. 2.load()方法可以返回实体的代理类实例(这取决原创 2012-02-04 13:11:54 · 370 阅读 · 0 评论 -
HQL总结
以个普通Users表为例: 建表语句: CREATE DATABASE `interceptor` CHARACTER SET 'utf8'; USE `interceptor`; DROP TABLE IF EXISTS `users`; create table users( id int auto_increment primary key, name varchar原创 2013-01-10 19:50:22 · 212 阅读 · 0 评论 -
Hibernate的核心接口
Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。 这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对 象进行存取,还能够进行事务控制。 下面对这五个核心接口分别加以介绍。 Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任...原创 2013-03-06 21:48:44 · 84 阅读 · 0 评论 -
Hibernate缓存管理
1.一级缓存的管理: 当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存 中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库...原创 2013-03-21 13:38:20 · 64 阅读 · 0 评论 -
Hibernate数据持久化过程
原创 2013-03-22 22:17:07 · 92 阅读 · 0 评论 -
Hibernate实体对象的三种状态
总结: *瞬时(transient): 数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。*持久(persistent): 数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。*脱管(detache...原创 2013-03-23 14:15:20 · 80 阅读 · 0 评论 -
Hibernate工具类
package com.org.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactor...原创 2013-03-23 16:22:57 · 63 阅读 · 0 评论 -
hibernate.cfg.xml配置文件
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='utf-8'表明XML文件的编码方式--> <?xml version='1.0' encoding='utf-8'?> <!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解...原创 2013-03-23 16:55:54 · 74 阅读 · 0 评论 -
hibernate单向 多对一关联
一个班级可以有多个学生,一个学生只能属于一个班级。因此学生到班级就是典型的单向多对一关系。 数据库的特征:在学生表中加一个班级的外键(此外键参考班级的主键) 程序的结构: 类图: Student.java package com.org.model; public class Student { private int id; private String name;...原创 2013-03-23 17:06:02 · 86 阅读 · 0 评论 -
hibernate单向一对多关联
类图如下: 在关系模型中,同多对一一样,还是在Student表中有一个外键指向Class表。 在配置的时候需要注意了,Student配置文件不需要进行额外的配置了,需要进行额外配置的是MyClass的配置文件,需要通过set标签配置,这里set标签也是有两个作用的,一为数据库服务,第二位程序服务。 MyClass.java package com.org.model;...原创 2013-03-23 18:14:00 · 72 阅读 · 0 评论 -
Hibernate中的一对多双向关联
类图: 数据库中表的关系同样还只是外键约束,这种关系交给了“多”这一方来维护。 MyClass.java package com.org.model; import java.util.HashSet; import java.util.Set; public class MyClass { private int id; private String n...原创 2013-03-24 09:19:07 · 79 阅读 · 0 评论 -
Hibernate一对一外键单向关联实例
类图: person表中设置一个外键card_id 参考card表的主键。 Person.java类 package com.org.model; public class Person { private int id; private String name; private Card card; public int getId() { return...原创 2013-03-24 10:12:37 · 88 阅读 · 0 评论 -
Hibernate一对一外键双向关联实例
类图如下: Person.java类 package com.org.model; public class Person { private int id; private String name; private Card card; public int getId() { return id; } public void setId(in...原创 2013-03-24 15:07:25 · 74 阅读 · 0 评论 -
Hibernate一对一主键单向关联
person表中card_id 唯一,而且还有一个主键id,这就产生了数据冗余,事实上可以同时把主键id也作为外键,可以删除原有的外键card_id,也就是单向一对一的关联可以基于主键。 Person.java类 package com.org.model; public class Person { private int id; private String name; ...原创 2013-03-24 21:13:40 · 98 阅读 · 0 评论 -
Hibernate工作原理及为什么要用?
原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的读取并解析映射信息 3.通过config.buildSessionFactory();//创建SessionFactory 4.sessionFactory.openSession();//打开Sesssion 5.se原创 2012-02-04 16:09:04 · 190 阅读 · 0 评论