ege*_*ari 13 proxy hibernate lazy-loading equals
出于某种原因,当我的所有实体上的lazy = true时,当一方是延迟加载的实体而另一方是普通实体时,equals()方法无法正常工作.这是一个例子:
if(activeTask.getTask().equals(task)) {...}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,activeTask的任务将是代理,而右侧将是常规任务.equals()将失败.要解决这个问题,我经常做这样的事情:
if(activeTask.getTask().getId() == task.getId()) {...}
Run Code Online (Sandbox Code Playgroud)
这有效,但它并不理想.我宁愿使用我的equals()方法.
有没有人有一个很好的解决这个问题的方法?它真的增加了应用程序的噪音水平,不得不考虑这样的东西.
如果我说lazy = false,我不必处理代理,所以equals()将起作用.但这对性能产生了非常不利的影响.
不得不说,"equals()在所有情况下都有效,除非你使用代理......然后equals()不可靠."
小智 8
我意识到这是一个古老的问题,但它仍然没有答案,人们可能偶然发现它.
几天前我遇到了同样的问题.在项目中,我们使用一个抽象基类BasicEntityType,它只有一个ID,并且在所述基类中实现了equals:
@Override
public final boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
Class<?> objClass = HibernateProxyHelper.getClassWithoutInitializingProxy(obj);
if (this.getClass() != objClass) {
return false;
}
if (id == null) {
return false;
}
return id.equals(((BasicEntityType) obj).getId());
}
Run Code Online (Sandbox Code Playgroud)
此代码中有两个关键部分:
| 归档时间: |
|
| 查看次数: |
3333 次 |
| 最近记录: |