Java面试题之Hibernate( 二 )

解决方案一 , 按照Object[
数据取出数据 , 然后自己组bean

解决方案二 , 对每个表的bean写构造函数 , 比如表一要查出field1field2两个字段 , 那么有一个构造函数就是Bean(type1 filed1type2field2) , 然后在hql里面就可以直接生成这个bean了 。

4、介绍一下Hibernate的二级缓存

按照以下思路来回答:(1)首先说清楚什么是缓存 , (2)再说有了hibernate的Session就是一级缓存 , 即有了一级缓存 , 为什么还要有二级缓存 , (3)最后再说如何配置Hibernate的二级缓存 。

(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中) , 这个数据结构通常是或类似Hashmap , 当以后要使用某个对象时 , 先查询缓存中是否有这个对象 , 如果有则使用缓存中的对象 , 如果没有则去查询数据库 , 并将查询出来的对象保存在缓存中 , 以便下次使用 。

(2)Hibernate的Session就是一种缓存 , 我们通常将之称为Hibernate的一级缓存 , 当想使用session从数据库中查询出一个对象时 , Session也是先从自己内部查看是否存在这个对象 , 存在则直接返回 , 不存在才去访问数据库 , 并将查询的结果保存在自己内部 。 由于Session代表一次会话过程 , 一个Session与一个数据库连接相关连 , 所以Session最好不要长时间保持打开 , 通常仅用于一个事务当中 , 在事务结束时就应关闭 。 并且Session是线程不安全的 , 被多个线程共享时容易出现问题 。 通常只有那种全局意义上的缓存才是真正的缓存应用 , 才有较大的缓存价值 , 因此 , Hibernate的Session这一级缓存的缓存作用并不明显 , 应用价值不大 。 Hibernate的二级缓存就是要为Hibernate配置一种全局缓存 , 让多个线程和多个事务都可以共享这个缓存 。 我们希望的是一个人使用过 , 其他人也可以使用 , session没有这种效果 。

推荐阅读