一个典型的应用系统,其中主要的实体(例如Account)一般都有createdUser和lastModifiedUser这样的字段,用以跟踪该实体被那个用户创建和最后修改,我们用hibernate处理这个关系的时候一般是在实体端用一个多对一的单项关联来引用User
[code]<many-to-one class="User" name="createdUser" column="created_user"/>
<many-to-one class="User" name="lastModifiedUser" column="last_modified_user"/>[/code]
如果系统某个用户被删除,这时候会有一个问题:
[b] 1. 实体引用的User的这两个字段已经不存在,hibernate再加载这个实体时就会报引用实体不存在的异常。[/b]
这个问题的一个解决办法是在many-to-one映射中加入not-found="ignore",这样就不会报异常了,但引入了另一个问题:
[b]2.加载实体的时候,不管关联的createdUser和lastModifiedUser存不存在,hibernate都会自动发送一条sql去探测该对象存不存在,这样就多发送了两条sql,如果是列表加载50条记录,就要多发送2×50条sql,严重影响了性能。[/b]
请各位支支招,该类问题如何解决。
[code]<many-to-one class="User" name="createdUser" column="created_user"/>
<many-to-one class="User" name="lastModifiedUser" column="last_modified_user"/>[/code]
如果系统某个用户被删除,这时候会有一个问题:
[b] 1. 实体引用的User的这两个字段已经不存在,hibernate再加载这个实体时就会报引用实体不存在的异常。[/b]
这个问题的一个解决办法是在many-to-one映射中加入not-found="ignore",这样就不会报异常了,但引入了另一个问题:
[b]2.加载实体的时候,不管关联的createdUser和lastModifiedUser存不存在,hibernate都会自动发送一条sql去探测该对象存不存在,这样就多发送了两条sql,如果是列表加载50条记录,就要多发送2×50条sql,严重影响了性能。[/b]
请各位支支招,该类问题如何解决。