j2ee(SSH)项目开发中的代码小结(三)

IE报错, 之前写的内容全部没了,郁闷。。。。。。长话短说,希望各位能看懂。

一)当在applicationContext.xml中设置hibernate.hbm2ddl.auto的值为update 时,当改变了Map文件的属性,对应的类文件的代码会更新。例如User对应的map文件用Hibernate工具生成了BaseUser抽象类和User具体类,User继承BaseUser。那么修改了User map文件,BaseUser的内容会立即更新,如果你之前有自定义的代码写到BaseUser中,那这些代码会被覆盖。我就吃了这个亏,幸好用了代码版本控制软件^_^,解决办法是将自定义代码转移到User类中实现。

二)在一对多的情况下排序可以在配置文件中的set中加入order-by搞定。例如Depart对应多个User,那么在Depart中的User属性中的set 加入order-by="userName"来实现取出的set集合是用人员的姓名来排序的。这里的order-by的值是数据表中的字段,不是User类中的属性名。对于多对多的关系来说,由于有第三张表来存储其他两个主表的主键,一般情况下主键是唯一标识且都是无意义的字符串(如GUID),那么用主键排序用order-by就没多大意义了。

三)HQL的some函数小技巧:

from User u where :roleId = some elements(u.roles)

用来筛选包含给定角色的人员集合。由于人员和角色是主键来关联的,所以这里的参数roleId传入的是角色的主键值;

四)主键的生成一般用GUID值,保证唯一性。但是有时候却另当别论。比如我下载某个月的计划数据,但是我又要防止用户重复下载,如果用GUID来作为主键,那么永远都不会出现重复的情况,这样会导致用户下载N多的冗余数据。解决办法是找出此表中可以唯一确定一条记录的字段,例如字段A,字段B,字段C,那么在生成此记录的主键时用A+B+C再取他们算出的hashCode值,虽然可能重复,但其在一个表中的几率还是非常低的。这种方法已经在项目中实现,表中的记录已达到两百多万条,至今还没有出现主键重复的情况。

在这里推荐一本国人写的HIBERNATE参考书籍:HIBERNATE深入浅出,相当8错。

待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值