首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate有关问题总结

2012-09-01 
Hibernate问题总结Hibernate问题总结1、????????合理选择list(放而不取)和iterate(放且取,先取所有数据的ID

Hibernate问题总结

Hibernate问题总结

1、????????合理选择list(放而不取)和iterate(放且取,先取所有数据的ID值,再根据ID值去查询相应数据,并把取出的数据放于二级缓存中,但是先去缓存中找,再查数据库)方法,充分利用二级缓存;如果缓存中没有数据,则iterate方法的效率很低,因为要发出1+N条查询语句,而list每次只会发出一条查询语句

2、????????一对多中,对对象的关联集合属性进行二级缓存;

3、????????一对多中,可以合理利用迫切查询来针对懒加载的弊端;

4、????????检索时,推荐用HQL,因为HQL很灵活,并且可读性很好,并能重载配置文件中的数据获取(fetch)方式。对HQLQBCSQL的使用,推荐顺序:HQL->QBC->SQL

5、????????HQL可以使用连接查询,可以实现多态查询;

6、????????多对多=>拆分成两个一对多(注意单双向的实际意义);

7、????????一对多可以实现表的自连接(主键和外键都在一张表上);

8、????????组件映射(细粒度的对象属性,讲一个实体类拆分成几个小的实体类,但是仍然只用一张表映射);

9、????????命名的HQL,在hibernate的配置文件中配置;

10、???本地纯粹的SQL语句(尽量少用);

11、???无论是QBC还是HQL,都可以只查询表中的某一个字段的数据(返回相应的数据类型),也可以查询某几个字段的数据(返回一个Object类型的数组);

12、???动态更新(dynamic-update)只是更新改变了的对象属性,对没有改变的对象属性,在底层的SQL语句中不做update操作;

13、???动态插入(dynamic-insert)只是插入已经赋值的对象属性,对于没有赋值的对象属性,,在底层的SQL语句中不做insert操作;

14、???解决由于懒加载(lazy)而造成的异常,可以用Hibernate.initialize()方法对相应的对象进行初始化,也可以用Query的迫切查询HQL进行查询,还可以用OpenSessionInView设计模式,不推荐将lazy设为false

15、???在注解方式配置一对多或多对多双向关联中,必设mappedBy属性,相当于XML文件中的inverse属性,设置有哪一方维持关联关系;

16、???注意:其实hibernate中的实体类对象就是通过数据库表中已有的数据构造的,其实数据库表中的数据与hibernate并无什么关系,只不过是hibernate将数据封装成对象罢了,所以数据库表中的数据与hibernate中的什么实体类、什么多态查询、什么继承关联、一对多、多对多等等没有什么紧密的关系,是分离的。所有的这些关联关系在数据库表上无非就是几个外键的关联罢了,但是在hibernate中却被封装成了类与类之间的组合关系;

?

热点排行