原创转载请注明出处:http://agilestyle.iteye.com/blog/2359961
Hibernate核心接口
Configuration
SessionFactory
Session
Query
Criteria
Transaction
Hibernate工作原理
配置Configuration对象,读取并解析配置文件
读取并解析映射信息,创建SessionFactory
创建session对象
开启事务Transaction
完成CRUD持久化操作
提交事务
关闭session
Hibernate关系映射
@ManyToOne(fetch默认FetchType是eager)
@OneToMany(fetch默认FetchType是lazy)
@OneToOne(fetch默认FetchType是eager)
@ManyToMany(fetch默认FetchType是lazy)
Hibernate对象状态
Transient
Persistent
Detached
Customer customer = new Customer(); // new之后,不处于Session的缓存中:临时态 session.save(customer); // 处于这两句之间,已经被持久化,加入到Session的缓存中:持久态 transaction.commit(); session.close(); // session关闭之后,已经被持久化,但不再处于Session的缓存中:游离态
Hibernate的缓存等级及其特点
一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库取数据。
二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。
Hibernate有哪些主键
TABLE
SEQUENCE
IDENTITY
AUTO
Hibernate有几种查询数据的方式
有三种查询方式
- HQL:Hibernate Query Language,它跟SQL非常类似
- Criteria Query,以对象的方式添加查询条件
- SQL,直接使用SQL语句操作数据库
Hibernate的Set, List, Bag, Map有什么异同
List可以重复,有序的一种集合
Bag(结合了List与Set),可以重复且没有顺序的一种集合,是Hibernate提供的
Set不可以重复,没有顺序的一种集合
Map是key-value对形式的一种映射
Hibernate中session.save()和session.persist()的区别
session.save()返回的是Serializable
session.persist()返回的是void
Hibernate中load()方法和get()方法的区别
load()与get()方法都可以根据标识符属性值查询获取一个持久化对象,但是在为找到符合条件的持久化对象时,load()方法抛出违例;get()方法返回null。
get()方法先从Hibernate一级缓存中查询符合条件的对象,找不到则直接从数据库中查找记录;
而load()方法则从Hibernate先从Hibernate的一级缓存中查找符合条件的对象,找不到还会在Hibernate的二级缓存中查找对象,仍未找到才会查找数据库。
Hibernate中inverse属性的作用
在Hibernate中一对多的单向或者双向关联的情况下,我们可以将“一”方控制权交给“多”方,称为“控制反转”(inverse),代码中使用控制反转需要在一方的映射文件中设置inverse属性为true,该属性的默认值为false。
Hibernate的检索策略
HQL
// 创建一个Query对象 Query query = session.createQuery("from Customer as c where c.name = :customerName" and c.age = :customerAge"); // 动态绑定参数 query.setString("customerName", "Tom"); query.setInteger(customerAge", 21); // 执行查询,返回查询结果 List result = query.list(); 方法链编程风格 List result = session.createQuery("from Customer as c where c.name = :customerName" and c.age = :customerAge") .setString("customerName", "Tom") .setInteger("customerAge", 21) .list();
QBC
// 创建一个Criteria对象 Criteria criteria = session.createCriteria(Customer.class); // 设定查询条件,然后把查询条件加入到Criteria中 Criterion criterion1 = Expression.like("name", "T%"); Criterion criterion2 = Expression.eq("age", new Integer(21)); criteria = criteria.add(criterion1); criteria = criteria.add(criterion2); // 执行查询语句,返回查询结果 List result = criteria.list(); 方法链编程风格 List result = session.createCriteria(Customer.class) .add(Express.like("name", "T%")) .add(Express.eq("age", new Integer(21))) .list();
Hibernate分页查询
采用HQL检索方式
Query query = session.createQuery("from Customer c order by c.name asc"); query.setFirstResult(0); query.setMaxResult(10); List result = query.list();
采用QBC检索方式
Criteria criteria = session.createCriteria(Customer.class); criteria.addOrder(Order.asc("name")); criteria.setFirstResult(0); criteria.setMaxResult(10); List result = criteria.list();
相关推荐
Hibernate常见面试题,总结了各个公司关于hibernate的常见面试题
Hibernate常见面试题汇总 Hibernate常见面试题汇总
hibernate 常见异常非常不错的,hibernate 常见异常非常不错的
Hibernate的级联操作(增,删,该)
hibernate常见错误解决方案
Hibernate基本数据操作方法 java struts hibernate
hibernate常见问题及处理。
Hibernate操作持久化对象Hibernate操作持久化对象Hibernate操作持久化对象Hibernate操作持久化对象Hibernate操作持久化对象
hibernate常见异常,hibernatejpa注解使用开发的解决方案
关于Hibernate操作持久化类的Criteria方式的书本方法
N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在Spring中、事务...
hibernate 操作数据库的详细图解。
2022年Hibernate常见面试题汇总.doc
Hibernate常见的20个问题 1问Hibernate初始化时出现出错代码: 2问:Hibernate报错:"Not binding factory to JNDI, no JNDI name configured
Hibernate对BLOB CLOB操作,详细的操作说明
整理了hibernate常见的异常,有了此文档,开发中遇到的Hibernate异常调试更轻松
hibernate操作全面配置讲解 让你知道如何使用myeclipse来配置一个hibernate的项目。
hibernate更新操作 hibernate更新操作
Hibernate操作数据库的方法.doc
SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结 SpringMVC spring hibernate 集成 常见问题