关于一个领域模型的问题,请各位帮忙.

08-09-08 javaEE
最近在做一个项目,有如下一个需求:

用户可以加对方为好友。

我采用hibernate映射,模型如下:

public class Account{

private String id ;

private String userName;

private String password ;

......

@ManyToMany(fetch=FetchType.lazy)//这个地方级联关系应该如何设置呢?

private Collection<Account> friends;

setter/getter.....

}

public class UserCommonServiceImple implements UserCommonService{

public void addToMyFriend(Account myselfArg,Account friendArg){

//myself,以及friend都是从表现层传过来的,不完整,这样就需要查询数据。

myself = this.getAccountRepository().query(myselfArg.getId());

friend = this.getAccountRepository().query(friendArg.getId());

myself.getFriends().add(friend);

this.getAccountRepository().update(myself);

//问题就出在这里.每次加好友的时候首先要查询两次数据库,把从表现层传来的两个账号填充完整,然后还要把已经的好友全部加载出来,那么如果好友很多的话,每次加载好友很耗费性能。并且这样一个加好友的功能要查询多次数据库,太耗费性能了,请各位帮忙。多谢了。

}

}

请问各位这个问题怎么解决,有没有更好的方法。请各位能在百忙之中抽点时间帮个忙,多谢。

[该贴被javaEE于2008-09-08 15:35修改过]

              

javaEE
2008-09-08 20:10
请各位帮忙,多谢了。

banq
2008-09-09 10:03
用merge方法试验看看,比update效率要高,而且你事先不要再查询。

javaEE
2008-09-09 10:37
哦,多谢banq老师了。现在学生还有一个问题请教,请banq老师帮忙。每个用户都有个人主页。个人主页显示用户的好友,最近访客等信息。我是把个人主页独立出去做为了一个值对象,模型如下:

public class Account{

private PersonalPage personalPage;

}

public class PersonalPage{

}

但是这样有个问题,personpage的内容都是通过查询数据库填充的,并且个人主页信息很多,查询很费性能,如果用户刷新一下就要去查询数据,或者当其他人访问某人的个人主页时,也是去数据库查询,这样太费性能,所以我想是把personalPage的内容缓存,因为personalPage是只读的,banq老师能不能指点个缓存的方案。其他的一个方案就是把Account缓存,而account是聚合的根,account控制了对personalPage的缓存,能不能缓存account,account的写要比personalpage的写操作频繁。

javaEE
2008-09-09 11:49
>>用merge方法试验看看,比update效率要高,而且你事先不要再查询。

banq老师您好,我用merge试了一下,merge后,表里的数据都没了,并且account有个email字段,我设置为了非空的,那么merge的时候也必须要设置email.请问老师还有什么解决办法吗?多谢了。

猜你喜欢
3Go 1 2 3 下一页