07
2020
11

比较Hibernate三种检索策略的优缺点?

● 立即检索 ● 优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象; ● 缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间; ● 延迟检索 ● 优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间; ● 缺点:应用程序如果希望访问游离状态代理
07
2020
11

请简述Session的特点有哪些?

● 不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。 ● Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。 ● 在Session中,每个数据库操作都是在一个事务(transaction)中进行的,这样就可以隔离开不同的操作(甚至包括只读操作)。
07
2020
11

Session的清理和清空有什么区别?

 Session清理缓存是指按照缓存中对象的状态的变化来同步更新数据库;清空是Session的关闭;
07
2020
11

叙述Session的缓存的作用?

● 减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。 ● 保证缓存中的对象与数据库中的相关记录保持同步。当缓存中持久化对象的状态发生了变换,Session并不会立即执行相关的SQL语句,这使得Session能够把几条相关的SQL语句合并为一条SQL语句,以便减少访问数据库的次数,从而提高应用程序的性能。
07
2020
11

Spring的两种代理JDK和CGLIB的区别浅谈?

Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 ● 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,或者强制使用CGLIB实现AOP。 ● 如果目标对象没有实现了接口,必须采用CGLIB库,Spring会自动在JDK动态代理和CGLIB之间转换。 
07
2020
11

No Session问题原理及解决方法?

No session问题报错如下:  根据字面上的意思,是指代理不能被初始化,session已经关闭。 ● No session问题产生的原因: 当执行Session的load()方法时,Hibernate不会立即执行查询所查询对象关联的对象(在此我们统称被关联的对象类为A类),仅仅返回A类的代理类的实例,这个代理类具由以下特征: 由Hibernate在运行时动态生成,它扩展了A类,因此它继承了A类的所有属性和方法,但它的实现对于应用程序是透明的
07
2020
11

什么是Hibernate延迟加载?

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。 延迟加载的过程:通过代理(Proxy)机制来实现延迟加载。Hibernate从数据库获取某一个对象数据时、获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据(除标识符外),Hibernate并不从数据库加载
07
2020
11

如何进行Hibernate的优化?

 ● 数据库设计调整。 ● HQL优化。 ● API的正确使用(如根据不同的业务类型选用不同的集合及查询API)。 ● 主配置参数(日志,查询缓存,fetch_size,batch_size等)。 ● 映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)。 ● 一级缓存的管理。 ● 针对二级缓存,还有许多特有的策略。 ● 事务控制策略。 
07
2020
11

get和load的区别?

 ● get是立即加载,load是延时加载。 ● get会先查一级缓存,再查二级缓存,然后查数据库;load会先查一级缓存,如果没有找到就创建代理对象,等需要的时候去查询二级缓存和数据库。(这里就体现load的延迟加载的特性。) ● get如果没有找到会返回null,load如果没有找到会抛出异常。 ● 当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的
07
2020
11

关于Hibernate的orm思想你了解多少?

ORM指的是对象关系型映射(Object RelationShip Mapping),指的就是我们通过创建实体类对象和数据库中的表关系进行一一对应,来实现通过操作实体类对象来更改数据库里边的数据信息。这里边起到关键作用的是通过Hibernate的映射文件+Hibernate的核心配置文件。