Hibernate面试题部分汇总集合(5)

发布时间:2021-06-06

此文档主要简绍J2EE中的hibernate面试突击问题部分集合

⑹如果可能,使用UUID作为主键生成器;

⑺如果可能,使用基于Version的乐观锁策略替代悲观锁;

⑻开发过程中,打开Hibernate的SQL日志文件(hibernate.show_sql),通过观 察Hibernate生成的SQL

语句进一步了解其实现原理,从而指定更好的实现策略;

⑼数据库本身的优化也起着至关重要的作用,合理的索引、缓存和数据分区策略 都会对持久层性能带来客观提升。

8.Hibernate中的update()和saveOrUpdate()的区别?

Hibernate中的对象状态有3种,分别为:

· 未被持久化的值对象(Value Object,VO);

· 已经被持久化的持久化对象(Persistent Object,PO);

· 曾经被持久化过,但现在已经和Session分离,以VO的身份在运行。

首先,我们来说说何时用update();

· 如果你的PO不需要跨Session,即打开一个Session之后,对其进行操作,之后关闭,再也不会用到了,此时不需要用update()方法,此时Hibernate会自动检测到PO已经被修改过,会向数据库发送一条Update语句;如下代码: Foo foo=sess.load(Foo.class,id);;

foo.setXXX(xxx); mit();

· 如果你的PO需要跨Session操作,在第一个Session关闭后,你还想把

已经于第一个Session分离的PO当做VO来用,并将修改更新到数据库中,那么 此时就需要Update()方法;也就是说,当数据是持久化对象时,不需要使用update方法,当数据不是持久化状态的时候,必须使用update方法,告诉数据库要更新数据;然后,我们谈谈saveOrUpdate();

如果业务层传过来的是一个已经持久化过的PO对象,那么Hibernate就会

根据这个方法更新该对象,如果传递过来的是一个VO对象,那么Hibernate就 会save这个对象。

9.Hibernate中的load()和get()的区别?

最重要的区别:如果未能发现符合条件的记录,Hibernate get方法返回null,而load方法会抛出一个ObjectNotFoundException。

1. 对于Hibernate get方法,Hibernate会确认一下该id对应的数据是否

存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。

精彩图片

热门精选

大家正在看