java面试常见问题之Hibernate总结
主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检索策略是什么,分别适用于哪种场合,ORM解决的不匹配问题, Hibernate映射继承关系的3种方式,Session的find()方法以及Query接口的区别等方面问题的总结,具体内容如下: 1 Hibernate的检索方式 Ø 导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø OID检索(按照对象的OID来检索对象。) Ø HQL检索(使用面向对象的HQL查询语言。) Ø QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø 本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检索策略是什么,分别适用于哪种场合,ORM解决的不匹配问题, Hibernate映射继承关系的3种方式,Session的find()方法以及Query接口的区别等方面问题的总结 Ø 持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象。 Ø 游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。 优点:对应用程序完全透明。 缺点:select语句数目多。 适用:类级别。 Ø 延迟检索 优点:由应用程序决定加载哪些对象,可以避免执行多余的select语句以及避免加载不需要访问的对象,节省内存空间,提高检索效率。 缺点:应用程序如果要访问游离态的代理类实例,必须保证它在持久化时已经被初始化。 适用:一对多或多对多关联。应用程序不需要立即访问或者根本不会访问的对象。 Ø 迫切左外连接检索 优点:对应用程序完全透明,不管对象处于持久化状态还是游离状态,应用程序都可以方便的从一个对象导航到另一个与它相关联的对象。使用了外连接,select语句数目少。 缺点:可能会加载程序不许要访问的对象。复杂的数据库表连接形象检索性能。 适用:一对一或多对一关联。应用程序需要立即访问的对象。数据库系统具有良好的表连接性能。 4 ORM解决的不匹配问题(域模型与关系模型之间存在的不匹配) Ø 域模型中有继承关系,关系模型中不能直接表示继承关系。 Ø 域模型中有多对多关联关系,关系模型中通过连接表来表示多对多关联关系。 Ø 域模型中有双向关联关系,关系模型中只有单向参照关系,而且总是many参照one方。 Ø 域模型提倡精粒度模型,关系模型提倡粗粒度模型。 5 Hibernate映射继承关系的3种方式 Ø 每个子类一张表,存放子类所特有的属性(tableper subclass) Ø 每个具体类一张表(union-subclass),保存是子类完整信息(table per concrete ) 6 Session的find()方法以及Query接口的区别 7 Hibernate关联关系配置 Ø 一对多 Ø 多对多 8 简述Session的特点 Ø Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。 Ø 在Session中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。 9 Hibernate中采用XML文件来配置对象-关系映射的优点 10 Session的缓存的作用 Ø 保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。 11 多事务并发运行时的问题 Ø 脏读 Ø 虚读/幻读 Ø 不可重复读 Ø 第二类丢失更新 12 session的清理和清空的区别 Ø 清空是session清除部分或全部对象或者session关闭; 13 Hibernate工作原理及为什么要用 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory Ø 为什么要用 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 14 Hibernate延迟加载 2.Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 15 Hibernate的缓存机制 2.二级缓存 a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据。 c) 第三方缓存的实现 16 优化Hibernate 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6.继承类使用显式多态 7.表字段要少,表关联不要怕多,有二级缓存撑腰 以上内容是针对java面试比较常见的Hibernate总结,希望能够帮助到大家。 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – AngularJS Spring MVC具有安全性 – 从哪里开始?
- Spring deleteAll方法:删除指定集合中的所有实体对象
- java – Jackson – 将boolean序列化为1/0而不是true / fal
- 从Java类创建JSON模式
- Java6实现闪屏窗口 Splash Screen
- java – 具有独占启动密钥的DynamoDB全局二级索引
- 廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池
- 空对象引用上的’java.lang.String android.os.Bundle.getS
- java设计模式23种常见经典设计模式面编程语言
- java – 使用流进行单词计数