gpt4 book ai didi

java - 什么会导致 getClass() != obj.getClass() 在相​​同的对象上不相等

转载 作者:行者123 更新时间:2023-11-30 08:27:32 29 4
gpt4 key购买 nike

我正在尝试比较两个相同的对象。当页面第一次加载时,它们是相等的,但是当我第二次刷新页面时,尽管数据或对象没有改变,但它们并不相等。

我在做什么。

我有一个 CurrentUser obj,我在登录时将其存储在用户 session 中。我使用 currentUser 与表单的 assignedUser 进行比较。如果 currentUser.equals(pr.getAssignedUser()) 然后我启用访问。 AssignedUser 是对 CurrentUser 的 hibernate 变量引用。如果我从我的 equals 覆盖中删除 getClass() != obj.getClass 并只使用属性比较,一切正常。

最让我担心的是它在第一次访问时有效,但在页面刷新时不起作用。不知道发生了什么,我担心内存泄漏。

有人知道这里会发生什么吗?

CurrentUserServiceImpl.class

@Scope(ScopeConstants.PERTHREAD)
public class CurrentUserServiceImpl implements CurrentUserServiceService {

private final CrudDAO crudDAO;
private CurrentUser currentUser;

public CurrentUserServiceImpl(CrudDAO crudDAO) {
this.crudDAO = crudDAO;
}

public Long getUserId() {
return getUser().getId();
}

public CurrentUser getCurrentUser() {
if (this.isUserExist() && applicationUser == null) {
PersonProfile personProfile = (PersonProfile) SecurityUtils.getSubject().getPrincipal();
currentUser = crudDAO.find(personProfile.getUid());
}
return currentUser;
}

public boolean isUserExist() {
return SecurityUtils.getSubject().getPrincipal() != null;
}
}

PurchaseRequisition.class

public PurchaseRequisition {

@Inject
private CurrentUserService currentUserService;

@Inject
private CrudDAO crudDAO;

void setupRender() {
CurrentUser currentUser = currentUserService.getCurrentUser();

PurchaseReq pr = crudDAO.find(PurchaseReq.class, id);

if(currentUser.equals(pr.getAssignedUser()) {
System.out.println("equal");
}
}
}

最佳答案

Hibernate 使用 CGLib 或 javassist 创建代理类。因此 getClass() 无法工作。请改用 instanceof

这个答案有一个替代解决方案:https://stackoverflow.com/a/1139992/342852

关于java - 什么会导致 getClass() != obj.getClass() 在相​​同的对象上不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802158/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com