Hibernate 注解对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究
----------------------------------
Spring,FetchType.LAZY和FetchType.EAGER什么区别?
?而Remote端Eclipse Console口抛出Session无效的异常:?如下二改变Change hibernate.jdbc.fetch_size大小,从数据库中取出2000条和4000条数据,记录取出时间,如下:?如上两组数据,可以得出结论,在这个应用中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下的测试数据
?
?从上图比较可以得出结论:
??????1 JoinTable下操作数据库花费的时间要长于JolinColumn;
????? 2 JolinColumn下节省的时间约为JoinTable下的2.5%;
分析原因:JoinTable花费时间多的原因是JoinTable下生成的中间表,要存取数据时都要查询中间的级联表,所以花费时间多;
?
4 测试建立外键与不建立外键两种情况下对存取数据库的影响
如上面3中都是设置外键的情况下测试的,下面我们在JoinColumn下做一组不设置外键的测试,不设置外键Annotation相当简单就是在原来的基础上去掉@ForeignKey标记,如下
?? 从上面两组图我们可以得出如下结论:
??????1 ForeignKey对数据库的存取影响比较大,特别是数据库的查询
????? 2 设置ForeignKey可以减少数据库存取的时间
????? 3 设置ForeignKey插入数据库节省的时间是不设置ForeignKey的5.5%,查询时则可以节省6.5%
?
--------------------------------------------------------------
说明:以上时间有一定局限性,只是在当前这种情况下测试的结果,不过可以当做参考。
?如上两组数据,可以得出结论,在这个应用中hibernate.jdbc.batch_size设置为20-30之间Hibernate工作效率最好;而hibernate.jdbc.fetch_size是值设置为40左右Hibernate的工作效率最好
?
?从上图比较可以得出结论:
? 从上面两组图我们可以得出如下结论: