【1】Hibernate有哪几种查询数据的方式
HQL语句,原生SQL查询,Criteria语句
【2】说说AOP和IOC的概念以及在Spring中是如何应用的
IOC :控制反转,即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。在
AOP:面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种思想。
【3】Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因
没有,Servlet本身就没有考虑线程安全,所以action中非常不推荐写新线程执行某些操作
【4】在Hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题?
对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2
field2) ,然后在hql里面就可以直接生成这个bean了。
【5】如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6.继承类使用显式多态
7.表字段要少,表关联不要怕多,有二级缓存撑腰
【6】比较Hibernate的三种检索策略优缺点
1立即检索;
优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;
缺点:1.select语句太多;2.可能会加载应用程序不需要访问的对象白白浪费许多内存空间;
2延迟检索:
优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间;
缺点:应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化;
3 迫切左外连接检索
优点:1对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。2使用了外连接,select语句数目少;
缺点:1 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;2复杂的数据库表连接也会影响检索性能;
【7】谈谈Hibernate中inverse的作用
verse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系。
【8】Hibernate的主键生成机制
1、native: Hibernate会根据数据库类别,使用其原生的主键生成机制
2、assigned:主键的生成方式完全由应用程序控制(生成和赋值)
3、identity:使用数据库的自增(auto_increment)之间生成方式
4、sequence:使用数据库Sequence方式,主要适用于Oracle
5、increment:Hibernate会使用一张表来存储主建值,当有新的数据记录产生时,该表的主键值就会递增。该方式适用于单独的Hibernate应用系统。如果有多个Hibernate应用系统公用该表时,就很难保证不发生race condition,造成主键值错 乱
6、Hilo:一旦指定Hilo,hibernate就会使用high/low算法来生成主键,Hibernate本身会维护一张默认名为hibernate_unique_keyd的表,用来生成主键方式因此适用于支持sequence的数据库(Oracle)
7、seqhilo:生成主键的方式类似于Hilo,不过需要借助sequence方式,因此适用于支持sequence的数据库(Oracle)
8、uuid.hex:该方式会根据网址、时间戳等条件,生成一个128位的主键。适用于跨数据库的应用
9、guid:该方式会通过数据库产生全局性的标识符(仅仅适用于SQL Server和MySQL数据库)
【9】什么是Hibernate的并发机制?怎么去处理并发问题?
Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次,
然后就丢弃。
如果一个Session 实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用。
如果在Http Session中有hibernate的Session的话,就可能会出现同步访问Http Session。只要用户足够快的点击浏览器的“刷新”,
就会导致两个并发运行的线程使用同一个Session。
【10】Spring的事务管理详解
Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、 TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为 SessionFactory,TransactionManager的实现为HibernateTransactionManager。