锁定老帖子 主题:我出的面试题
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-14
aninfeel 写道 楼主应该进教育局,帮国家愚弄学生。
也不用这么刻薄吧,楼主主要的缺点是没有把场景说清楚,如果作为面试,这样出题也未尝不可,大家总要有个讨论的基础嘛。关键是从对这个题目的讨论引出应试者对hibernate的理解程度,而不是就只回答个数目字了事。 |
|
返回顶楼 | |
发表时间:2007-06-14
logo 写道 yuonch 写道 下面一段代码执行过程中将由hibernate产生多少条sql语句,分别是什么:
Student s = new Student(); s.setName("aaa"); s.setGrade(1); dao.save(s); s.setGrade(6); dao.load(s,"xxx"); s.setGrade(5); dao.update(s); 公司网站有电子商务性质,所以对持久化方面要求的会严格一些,招聘几个月,看了2000多份简历,面试也有百来号人,但是这样一道简单的hibernate题目,答对的却只有3、4个 根据你后面写的条件来看,dao.load(s,"xxx")这条语句很蹊跷。因为不论Hibernate的Session接口,还是Spring的HibernateTemplate都没有这个方法签名,所以你这个问题根本答不出来,不知道你说的答案是4条SQL这个结论是怎么得出来的。 如果是这样: dao.load(Student.class, s.getId()) 并且假设上述代码在同一个事务范围内,那么只会产生一条SQL,即insert语句。 所以,我认为你的题目出错了,从某种意义上来说,你对Hibernate的理解也是有问题的。 有这个方法签名啊,在HibernateTemplate里。 |
|
返回顶楼 | |
发表时间:2007-06-14
public Object load(Object object, String str) throws DataAccessException; 请告诉我Spring源代码哪一行有这个方法签名,谢谢。 如果说Student的主键类型是String,那这段代码就大错而特错了。你save之后才能获得Hibernate自己生成的UUID,那程序员是怎么知道这个生成的UUID是“xxx”,如果不是,那么这段程序必然报错。 也就是说真正的答案就是:一条SQL也不会发送,而且程序会抛出异常,哈哈。 |
|
返回顶楼 | |
发表时间:2007-06-14
这个方法倒是有的,HibernateTemplate中:
public void load(final Object entity, final Serializable id) throws DataAccessException{...} hibernate的session接口中也有定义的: /** * Read the persistent state associated with the given identifier into the given transient * instance. * * @param object an "empty" instance of the persistent class * @param id a valid identifier of an existing persistent instance of the class * @throws HibernateException */ public void load(Object object, Serializable id) throws HibernateException; |
|
返回顶楼 | |
发表时间:2007-06-14
就放一段代码出来,然后就傻傻的问别人执行了几条sql,还很满足的说只有3,4个人答对,你连你的环境都没有说清楚,谁知道你的dao的方法是如何得到session的呢,如果没有用spring,那session是否是同一个,如果用了spring,谁知道你的dao上有没有加事务呢,还很自我陶醉
|
|
返回顶楼 | |
发表时间:2007-06-15
这个帖子评为隐藏帖实为不该!!
就帖子的内容来说没有什么问题,在加上后面的有人回答的答案,对理解HIBERNATE还是有很大帮助的,至于楼主用来考核这个做法对错与否,那是另外一件事! 至少像我一样,什么也不投,就对一些回帖进行评分! |
|
返回顶楼 | |