畅享博客 > 非鱼评影 > 程序设计 > NHibernate搭配Access的问题(续四)
2006-3-22 16:44:08

NHibernate搭配Access的问题(续四)

1.测试了两级一对多的关系,写入数据的确变的相当方便了,省却了大量重复的SQL代码的工作。但是当使用Session.Load加一个父对象的时候,它的子对象,以及这个子对象的所有子对象都会被加载,对于数据库或者网络都是个问题。

解决方案:给这个一对多的关系在配置文件hbm.xml的set段加上一个属性,lazy="true",这样就变成延迟载入,调入父对象的时候不会自动加载它的子集,只有当你要使用这个子集的时候(foreach),才会及时生成这个子集,这样就避免了浪费无用的查询时间。但是这样有一个要求,就是session必须保持活动,不能被Close,否则就无法再去调入新的查询内容了。

2.调入父对象的时候,子对象自动调入,如果用foreach来查询子对象,那么输出的顺序是不固定的,无论在父类中使用ListSet还是HashedSet,结果都是不固定的。

解决方案:还没有看到真正解决这个问题的方法,只能手动加载子类,使用Session.Find加HQL语言,可以达到任意控制权限。在一篇文章里看到使用list代替set,然后在list的里面可以添加一个index属性,标明排序的字段,实体类里面使用IList,但是我没有成功。回头再试。

3.在使用级联删除的时候,加载一个Group,Session.Delete(Group),然后查看执行的Sql语句,在Items表里居然每一行Item执行了一次Delete,也就是说它是按照Where ItemID=?来删除的,这样1000条记录就执行了1000次,为什么不使用Where GroupID=?呢,只要一句就搞定了,而且对于这种删除,数据库本身一般都是做了优化的。

4.突然想不起来了,占位,想起来再补。


推荐到鲜果:

评论

您正在以 匿名用户 的身份发表评论  快速登录
(不得超过 50 个汉字)
       看不清,换一个
提示消息
(输入完内容可以直接按Ctrl+Enter提交)