论坛首页 Java企业应用论坛

hibernate:从业务上避免脏数据?NO!

浏览 13950 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-09-23  
User user=getUser(uid);
Hero hero=getHero(hid);

为什么不

Hero hero  = getHero(hid);
User user = hero.getUser();
a(hero);

里外用法不一致?
0 请登录后投票
   发表时间:2011-09-23   最后修改:2011-09-23
抛出异常的爱 写道
User user=getUser(uid);
Hero hero=getHero(hid);

为什么不

Hero hero  = getHero(hid);
User user = hero.getUser();
a(hero);

里外用法不一致?


注意这点的人当然好,举一个例子。

有一个计算方法:会对这个List<Hero> heros; 进行一些计算 并且操作User

在方法外面也有一些操作User的代码。

如果单一的操作 是按照你写的方式去做。
Hero hero1=get(hero);
Hero hero2=get(hero);
遇到一个List<Hero> 你会User user=get(0).getUser();

然后去做么。当然hibernate这里有一级缓存但仅限于同一个session生命值周期内。。

这个是其中的一个陷阱。 还有另外一个陷阱:


User user=get(User);
user.setLevel(user.getLevel+1);
update(user);



update User set level = level +1;的区别。

在不同事物中操作同一条记录的时候,问题就显现出来了。当然,hibernate对于这个问题可以用加锁的方式解决。

0 请登录后投票
   发表时间:2011-09-23  
这玩意儿不就是Component吗?
0 请登录后投票
   发表时间:2011-09-23  
我觉得不是hibernate冗余了,是你的代码冗余了
在同一个事务里面对同一个对象进行矛盾的修改,前面的一些修改根本就是在做无用功,你说这样的情况会碰到很多,只能说明你们的设计不是足够良好的

0 请登录后投票
   发表时间:2011-09-23   最后修改:2011-09-23
matlab5y5 写道
我觉得不是hibernate冗余了,是你的代码冗余了
在同一个事务里面对同一个对象进行矛盾的修改,前面的一些修改根本就是在做无用功,你说这样的情况会碰到很多,只能说明你们的设计不是足够良好的



这种设计是很普遍的设计。1对多关联,除非你得hero 和user “毫无关联”。而且这些并不是同一对象。这里只是举例。虽然都是同一个userId但是User对象却可能不同!
0 请登录后投票
   发表时间:2011-09-23   最后修改:2011-09-23
糟糕的设计,就像是LZ举的失败的例子
0 请登录后投票
   发表时间:2011-09-23  
aa87963014 写道
matlab5y5 写道
我觉得不是hibernate冗余了,是你的代码冗余了
在同一个事务里面对同一个对象进行矛盾的修改,前面的一些修改根本就是在做无用功,你说这样的情况会碰到很多,只能说明你们的设计不是足够良好的



这种设计是很普遍的设计。1对多关联,除非你得hero 和user “毫无关联”。而且这些并不是同一对象。这里只是举例。虽然都是同一个userId但是User对象却可能不同!

弱弱的说..除了及其特殊.比如登陆等情况.大多数时候不设关系的...
0 请登录后投票
   发表时间:2011-09-23  
居然还在纠结设计。随便举一个例子

User保存活跃分,Hero计算战斗之后更改活跃分。User Hero 一对多。求高人给个不失败的设计
0 请登录后投票
   发表时间:2011-09-23   最后修改:2011-09-23
对于a,b函数,从函数的简单性与可测性而言,以及从两个函数的逻辑而言,看不任何出嵌套调用的原因。
0 请登录后投票
   发表时间:2011-09-23  
我不知道我是不是理解错了,Hibernate有单向和双向,你从Hero端处理数据,取得对象用load,casecade使用Merge.
至于你最终想更新的User中的分数,处理方式完全可以将分数下移到各个Hero,如果要取User的分数,load Hero list,相加分数就OK.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics