Hibernate常见面试题

1.  请解释Hibernate3.2主键的生成方式中,nativeidentity方式的区别。

   Native主键生成方式会根据不同的底层数据库自动选择IdentitySequenceHilo主键生成方式

特点:根据不同的底层数据库采用不同的主键生成方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。

  Identity当时根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。

  特点:与底层数据库有关,要求数据库支持Identity,如MySQl中是auto_increment, SQL Server 中是Identity,支持的数据库有MySqlSQL ServerDB2SybaseHypersonicSQL Identity无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。

 

2.  请解释为什么SessionFactory一般以单利方式使用。

 

SessionFactory是一个大型对象,而且线程安全。在一个程序中只需要一个

3.  请解释说明hibernate配置文件中dialect属性的确切含义。

 

数据库方言:多种数据库拥有不同的语言语法,通过设置dialect指定所用的数据库,并生成对应语法和语言的sql语句。

4.  请解释说明Hibernate控制下的POJO会呈现三种状态,分别是transientpersistenetdetached,请解释这三种状态。

 

Trabsient:暂态:数据库中没数据。跟session不相关。没存过。

Persistenet:游离态:在数据库中有记录,但是在session中没有。需要手工同步。

Detached:持久态:数据库中有记录,session中也有这记录。自动更新

5.  请解释Sessionload方法和get方法的不同;以及Querylistiterator方法的不同。

 

load():现在session缓存中寻找,如果找到了返回该对象,如果没找到,程序

会新建一个对象,并且返回,存在session中,不会在数据库中查找,在程序中如果没有用到这个实体类,可以节省一次数据库连接。如果在程序中用到了这个实体类,这个实体类就会在数据库去查找,如果没有查找到就会抛异常。

(延时加载)

 

get():在缓存在查找,如果找到该对象,返回该对象。如果没找到,会到数据库

中查找,如果数据库中有则返回该对象,如果没找到这返回空。(立即加载)

 

     

6.  Hibernate映射文件如下:

<class name=”Emp” table=”t_emp”>

<id name=”id” type=”integer”>………….</id>

<many-to-one name=”dept” class=”Dept” cascade=”save-update” column=”dept_id”

       Foreign-key=”fk_emp_dept”/>……</class>

写出hql语句用join fetch的方式查询出所有员工信息(包含所在的部门信息)

7.请解释cascade属性deletedelete-orphan的区别。

8.请解释inverse属性的作用,以及如何恰当是使用它优化查询的性能。

9.请解释Hibernate查询中出现的N+1问题,并提出解决方案。

10.请举例说明一对一关联映射的两种实现方式

11. Hibernate映射文件如下:

<class name="order" table="t_order">

<id name="id" type="integer">...</id>

<set name="items" cascade="save-update" inverse="false">

<key column="order_id" foreign-key="fk_item_order"/>

<one-to-many class="Item"/>

</set>

</class>

<class name="Item" table="t_item"> <id name="id" type="integer">

<property name="productName" type="string">

<column name="product_name" not-null="true" length="50"/>

</property>

</class>

请写出HQL:

1) 查询包含指定条目(Item)的所有订单(order

2) 分别使用select fetchjoin fetch两种方式查询所有的订单信息(

12.Hibernate映射文件如下:

<class name=“product table=“t_product>

    <id name="id" type="integer">

            <generator class="native"/>

    </id>

      <property name="name" type="string"/>

      <joined-subclass name="Book" table="t_book">

       <key column="id"/>

       <property name="author" type="string"/>

      </joined-subclass>

</class>

1) 查询指定name的所有Book信息

2 查询所有product信息(只需包含id和属性即可)

13.请举例说明如何使用discriminator标记和discriminator-value

属性实现将继承关系映射到一张表中的映射策略。

14、请解释说明dynamic-updatedynamic-delete属性的意义。

15、请举例说明formula属性的意义。

16、解释说明hibernate对分页查询的支持。

17,请简单描述使用Criteria进行条件查询的基本步骤;

18,请说明如何在Hibernate使用Native SQL

19,请简要的描述一下使用Hibernate进行大批量更新的经验;

20,请简要的描述一下使用Hibernate二级高速缓存的经验;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值