码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate使用注意事项

时间:2017-03-22 21:05:44      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:man   collect   插入   ring   关闭   有助于   false   编写   多对多   

映射的POJO类型中如果有基本类型最好都是用包装类来代替;

注意关联关系的正确设置,一对一(主键方式、外键外键方式),一对多和多对多的配置,单向、双向的配置;

更新核心配置文件的mapping:如果是在hibernate.cfg.xml中以导入映射文件的方式配置的话,注意在增加了新的domain类之后要将新的映射配置文件加入进去;

注意hibernate管理的对象的状态:是瞬时态还是托管态?有时候事务结束了之后还去读代理对象的值,这个时候设置了延迟加载的话会报错的;

注意在一对多主键级联操作的时候外键为NOT NULL可能会引发违例操作,这就和hibernate执行sql语句有关了;

在一对多关联中,常把多的一方作为主动关联方,由它去维护关联关系;也就是将many的一方inverse=false,而且这样也有助于改善性能;维护关联关系体现在将对方的引用设置到自己的属性当中;

尽量少用多对多关联(可以用多个一对多关联来来代替多对多关联);

多对多注意设置延迟加载,避免无谓的性能开销;

多对多关系中由于关联关系是两张表相互引用,因此在保存关联状态时必须双方同时保存,体现在二者互相设置对方的引用;

一对多关系的维护可以是双方都维护,也可以是由一方维护,但是多对多中仅且仅有一方维护关系(也就是inverse的设置);

在一个session中对同一个id最多只能有一个与之对应的瞬时态对象

在修改或这个删除的时候最好都是先查出要修改的对象,再进行操作,这样可以避免原来的关联关系;

通过引用查询可以不在代码中出现HQL/SQL语句;

对Action中对托管态对象的修改由于事务已经关闭而不会同步到数据库中;

避免查询时的SQL语句的N+1问题;

在需要的时候可以将延迟加载设置为false,在class标签中,这样在Session关了之后依然可以使用关联对象;

在编写POJO的时候,必须使用JDK的接口,而不应该使用JDK Collection的实现类,因为Hibernate返回的Set是Hibernate对Set接口的特定实现,因而会造成强转错误;

属性的延迟加载可以在<property>标签中设置,但是要对类进行加强;

Hibernate的内部缓存机制可能造成进行大量插入操作的时候OutOfMemory:可以每隔一段时间清空一次缓存;二是可以在核心配置文件的<session-factory>标签中加入<property name="hibernate.jdbc.batch_size">25</property>来进行批量插入;

hibernate中分页操作的实现;

hibenate的长对话session实现在web项目可以用Spring提供的OpenSessoinInView实现;

 

有问题欢迎相互探讨!

Hibernate使用注意事项

标签:man   collect   插入   ring   关闭   有助于   false   编写   多对多   

原文地址:http://www.cnblogs.com/tuhooo/p/6601872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!