Hibernate面试题

1、hibernate中get与load有什么不同之处?

get会先查一级缓存、再查二级缓存,然后再查数据库,load会先查一级缓存,如果没有找到就会创建代理对象,等需要的时候去查二级缓存和数据库。如果没有找到,get会返回null,load会抛出异常。

2、hibernate中save()、persist()、saveOrUpdate()三个方法的不同之处?

save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法。save()只能INSERT记录,saveOrUpdate()可以对记录INSERT和UPDATE。save的返回值是Serializable对象,该结果的值就是你插入到数据库后新记录的主键值。而persist()的返回值是void。persist方法保证当它在一个事务外部被调用时,并不立即转换成insert语句。尤其当我们封装一个长会话流程的时候,persist方法显得尤为重要了。

3、hibernate中SessionFactory有什么作用?是线程安全的吗?

SessionFactory是一个用于创建Hibernate的Session对象的工厂。SessionFactory通常是在应用启动时创建好的,应用程序中用它来获取Session。

作为一个单个的数据存储,它是线程安全点的,所以多个线程可同时使用一个SessionFactory`。SessionFactory的内部状态包含着同对象关系影射有关的所有元数据,它是 不可变的,一旦创建好后就不能对其进行修改了。

4、Hibernate中session指的是什么?可否将单个的Session在多个线程共享?

session代表着hibernate所做的一小部分工作,它负责维护着数据库的链接且不是线程安全的

5、可不可以将Hibernate的实体类定义为final类?

可以将hibernate实体类定义为final,但这种做法并不好,因为hibernate会使用代理模式在延迟关联的情况下提高性能,如果定义为final,java不允许对实体类进行扩展,所以hibernate就无法使用代理了,如此一来就限制了可以提升性能的手段。

http://www.cnblogs.com/wang-meng/p/5701996.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值