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中却被封装成了类与类之间的组合关系;

 

相关推荐