假设我有一个 bean:
class File {
private id;
private String name;
private User author;
private List<User> users;
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!super.equals(obj)) {
return false
}
if (!(obj instanceof File)) {
return false;
}
File other = (File) obj;
if (getId() == null) {
if (other.getId() != null) {
return false;
}
} else if (!getId().equals(other.getId())) {
return false;
}
if (getName() == null) {
if (other.getName() != null) {
return false;
}
} else if (!getName().equals(other.getName())) {
return false;
}
if (getAuthor() == null) {
if (other.getAuthor() != null) {
return false;
}
} else if (!getAuthor().equals(other.getAuthor())) {
return false;
}
if (getUsers() == null) {
if (other.getUsers() != null) {
return false;
}
} else if (!getUsers().equals(other.getUsers())) {
return false;
}
return true;
}
...
getters/setters
}
这个 bean 使用 MyBatis 或任何其他持久性框架从/映射到数据库。重要的是用户是延迟加载的(当第一次调用 getUsers() 时,它们是从数据库加载的)。
我的问题是,什么equals方法应该有这个bean?
我应该包括 id 字段(这是它的数据库主键)吗?
我应该包括用户列表吗?在 Java 对象上经常调用 Equals(例如,当它们存储在集合中时),所以这会扼杀惰性方法。