浏览 5213 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-15
A对象中有多个B,B对象中有多个C A中B,B中C都设定lazy="true" 经过sql输出跟踪 取出A的时候,如果不调用A.getBSet(),那么lazy起作用, 但如果调用了A.getBSet(),那么不但所有属于A的B取出来了,而再深一层的C也被取出来了,就是说这个时候B到C的lazy="true"失效了,但程序本身只需要对每个A取出B就行了的,而不是整个关系树都抓出来 有人知道这是什么原因么?或者如何解决? 这样性能损耗太大了,大了一个数量级。 映射文件大概是这个样子: <class name="A" table="A"> <id name="id" type="int"> <column name="id" sql-type="int" not-null="true"/> <generator class="native"/> </id> <set name="BSet" cascade="all" inverse="true"> <key column="A_id"/> <one-to-many class="B"/> </set> </class> <class name="B" table="B"> <id name="id" type="int"> <column name="id" sql-type="int" not-null="true"/> <generator class="native"/> </id> <set name="CSet" cascade="all" lazy="true" inverse="true"> <key column="B_id"/> <one-to-many class="C"/> </set> </class> <class name="C" table="C"> <id name="id" type="int"> <column name="id" sql-type="int" lazy="true" not-null="true"/> <generator class="native"/> </id> </class> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-10-23
你这是单向的一对多的关系
看你的映射文件 不知道关系怎么维护的 |
|
返回顶楼 | |
发表时间:2006-10-25
是的,因为你A.getBSET()的时候,已经初始化了所有的动态代理类b的对象,这个代理类b对象有个属性是所有的c的集合,当然也全部查出来了
|
|
返回顶楼 | |
发表时间:2006-10-27
这种问题应该可以通过调整集合属性的抓取策略来解决
|
|
返回顶楼 | |
发表时间:2006-10-27
这个问题应该有一个好的方式解决,
我只能说数据库方面设计应该可以改善. |
|
返回顶楼 | |
发表时间:2006-10-27
实在不行的话,或者可以设置lazy="extra"试试看……
|
|
返回顶楼 | |