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错。
待续......
补充:Jsp教程,Java基础