论坛首页 入门技术论坛

Hibernate Bean的Equals方法重载问题

浏览 15516 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-05-31  
非常赞同使用getClass()==getClass()做比较,看了你推荐的帖子后,正有此意!!
简单且相对了instanceof更合理,但又不用反射每个属性那么耗性能
0 请登录后投票
   发表时间:2009-05-31  
linliangyi2007 写道

还有一件事不明白,就是我在跟踪的时候,就像你说的this.id是有值的,但other.getId()依然返回null。
你上面说的,我基本明白了,直接取属性有问题,但通过get方法取id,应该要返回值才是啊?



通过你现在给的一些条件,很难判断为什么other.getId()依然返回null。毕竟token的所有getter,setter,都已经被hibernate代理了,cglib实现了suround级的方法代理,hibernate可以去调super的对应方法,也可以不调,取决于他的实现,现在需要确定几个事情:


1)token和你跟踪到的equels方法里的other是否同一个对象?如果是,没道理other.getId()为null呀,你在外面已经print一次token.getId()了。

2)other.getId()是否调了super.getId();这个通过你在getId设置断点就可以知道,你所设的断点,我前面也说了都是针对super类的。


0 请登录后投票
   发表时间:2009-05-31  
leadyu 写道
linliangyi2007 写道

还有一件事不明白,就是我在跟踪的时候,就像你说的this.id是有值的,但other.getId()依然返回null。
你上面说的,我基本明白了,直接取属性有问题,但通过get方法取id,应该要返回值才是啊?



通过你现在给的一些条件,很难判断为什么other.getId()依然返回null。毕竟token的所有getter,setter,都已经被hibernate代理了,cglib实现了suround级的方法代理,hibernate可以去调super的对应方法,也可以不调,取决于他的实现,现在需要确定几个事情:


1)token和你跟踪到的equels方法里的other是否同一个对象?如果是,没道理other.getId()为null呀,你在外面已经print一次token.getId()了。

2)other.getId()是否调了super.getId();这个通过你在getId设置断点就可以知道,你所设的断点,我前面也说了都是针对super类的。




十分感谢,思路已经清楚了。后面就是沿着思路把问题摸清楚了
0 请登录后投票
   发表时间:2009-05-31  
到底原因是什么呢,既然搞清楚了,为何不写写清楚?
0 请登录后投票
   发表时间:2009-05-31  
jianfeng008cn 写道
到底原因是什么呢,既然搞清楚了,为何不写写清楚?

楼主只是说思路清楚了,估计还没开始调试呢。
0 请登录后投票
   发表时间:2009-06-02  
leadyu 写道
linliangyi2007 写道

还有一件事不明白,就是我在跟踪的时候,就像你说的this.id是有值的,但other.getId()依然返回null。
你上面说的,我基本明白了,直接取属性有问题,但通过get方法取id,应该要返回值才是啊?



通过你现在给的一些条件,很难判断为什么other.getId()依然返回null。毕竟token的所有getter,setter,都已经被hibernate代理了,cglib实现了suround级的方法代理,hibernate可以去调super的对应方法,也可以不调,取决于他的实现,现在需要确定几个事情:


1)token和你跟踪到的equels方法里的other是否同一个对象?如果是,没道理other.getId()为null呀,你在外面已经print一次token.getId()了。

2)other.getId()是否调了super.getId();这个通过你在getId设置断点就可以知道,你所设的断点,我前面也说了都是针对super类的。




一切水落石出了。
在equals方法中,this对象的类是FlowToken,而other对象的类是proxy。this.id是有值的,other.id为null,但使用other.getId()是会取到lazy的id值的(之前估计这里测试的时候有问题,居然没取到值。)
一切如leadyu所预测的那样。
0 请登录后投票
   发表时间:2009-06-02  
再说对于帖子标题的看法!

本人一直认为在互联网上的,在BBS上一切都不必太较真。那种拘泥于标题,拘泥于网络形式,而忽视文章内容的做法,不敢苟同。

现在标题改了,算是迎合网络部分较真人士的观念吧!
做人难,现实生活累人,没想到上个bbs现在也很累人!
0 请登录后投票
论坛首页 入门技术版

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