关于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没有去查数据库)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值