2008-03-05

关于hibernate延迟加载对象的一个问题及分析

关键字: java, hibernate
今天有个郁闷的问题,是关于hibernate的model的equals 方法的.
@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
        if (getClass() != obj.getClass()) {
			return false;
		}
		Test other = (Test) obj;
		if (id == null) {
			if (other.id != null) {
				return false;
			}
		} else if (!id.equals(other.id)) {
			return false;
		}
		return true;
	}


Hibernate的延迟加载对象是经过cglib进行增加的.
以下代码会出现问题:
if (getClass() != obj.getClass()) {
			return false;
		}


getClass()的值是:com.model.Test.
obj.getClass()的值则为: com.model.Test$$EnhancerByCGLIB$$3b047fc7
也就是说两个对象的类是不一样的,结果会返回false

如果传入来的 obj对象是延迟加载的话,并且还没有调用过任务的get 方法,就会出现问题了,关键就在这里,
代码:
!id.equals(other.id)

Id的值是:100(你的返回值可能会有所不同),但是other.id的返回值是null
这是因为在hibernate时面是认get方法去查数据库的,所以other.id的返回值是null(由于还没有调用过任何的get方法,hibernate没有去查数据库)
评论
发表评论

您还没有登录,请登录后发表评论

yangzhihuan
搜索本博客
最近加入圈子
存档
最新评论