读书人

Hibernate 引文对Hibernate属性(Casc

发布时间: 2012-11-20 09:55:43 作者: rapoo

Hibernate 注解对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究

----------------------------------

Spring,FetchType.LAZY和FetchType.EAGER什么区别?

?而Remote端Eclipse Console口抛出Session无效的异常:

?如下二改变Change hibernate.jdbc.fetch_size大小,从数据库中取出2000条和4000条数据,记录取出时间,如下:Hibernate 引文对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究?如上两组数据,可以得出结论,在这个应用中hibernate.jdbc.batch_size设置为20-30之间Hibernate工作效率最好;而hibernate.jdbc.fetch_size是值设置为40左右Hibernate的工作效率最好

?

3? 比较@OneToMany下@JoinColumn和@JoinTable的差别(对性能的影响)

@JoinColumn不产生级联表,将一方的主键存放在另一方的表中,如下,为JoinColumn的Entity Bean配置

以User与Friend为例:

?@JoinTable产生级联表,将双方的主键存放在一张独立的表中,如下为@JoinTable的配置

?如上用直线标出的5张表就是5对一对多关系产生的级联表,它里面存储两个表的主键。

这两种处理对数据的插入和存取有什么影响,就这一问题做如下测试:

????? 1? 分别在两种配置下通过EJB向数据库中插入2000个User 5次,记录每次时间,求出平均时间;

????? 2? 分别在两种配置下通过EJB从数据库中取出10000条数据5次,记录每次时间,求出平均时间;

结果如下两组图分别是JoinTable和JoinColumn下的测试数据

Hibernate 引文对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究?Hibernate 引文对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究?从上图比较可以得出结论:

??????1 JoinTable下操作数据库花费的时间要长于JolinColumn;

????? 2 JolinColumn下节省的时间约为JoinTable下的2.5%;

分析原因:JoinTable花费时间多的原因是JoinTable下生成的中间表,要存取数据时都要查询中间的级联表,所以花费时间多;

?

4 测试建立外键与不建立外键两种情况下对存取数据库的影响

如上面3中都是设置外键的情况下测试的,下面我们在JoinColumn下做一组不设置外键的测试,不设置外键Annotation相当简单就是在原来的基础上去掉@ForeignKey标记,如下

?Hibernate 引文对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究? 从上面两组图我们可以得出如下结论:

??????1 ForeignKey对数据库的存取影响比较大,特别是数据库的查询

????? 2 设置ForeignKey可以减少数据库存取的时间

????? 3 设置ForeignKey插入数据库节省的时间是不设置ForeignKey的5.5%,查询时则可以节省6.5%

?

--------------------------------------------------------------

说明:以上时间有一定局限性,只是在当前这种情况下测试的结果,不过可以当做参考。

读书人网 >软件架构设计

热点推荐