Если вы хотите что-то вроде
public class MyEntity {
private String name;
private Organization organization;
// getter's and setter's
public boolean equals(Object o) {
if(!(o instanceof MyEntity))
return false;
MyEntity other = (MyEntity) o;
return new EqualsBuilder().append(getName(), other.getName())
.append(getOrganization(), other.getOrganization())
.isEquals();
}
}
Но если вы хотите избежать этого, потому что теперь вы хотите загрузить лениво загруженную сущность , вы можете положиться на Hibernate.isInitialized метод и предоставить свою собственную подпрограмму
public boolean equals(Object o) {
if(!(o instanceof MyEntity))
return false;
MyEntity other = (MyEntity) o;
boolean equals = new EqualsBuilder().append(getName(), other.getName())
.isEquals();
if(Hibernate.isInitialized(getOrganization())) {
// loaded Organization
} else {
// supply custom routine
}
return equals;
}
У меня есть не обновленная веб-страница, где Hibernate предоставляет следующую матрицу
no eq/hC at all eq/hC with the id property eq/hC with buisness key
use in a composite-id No Yes Yes
multiple new instances in set Yes No Yes
equal to same object from other session No Yes Yes
collections intact after saving Yes No Yes
Где следующие проблемы:
использование в составном идентификаторе :
Чтобы использовать объект в качестве составного идентификатора, он должен каким-то образом реализовать equals / hashCode, == идентичности в этом случае будет недостаточно.
несколько новых экземпляров в наборе :
Будет ли работать следующее или нет:
HashSet someSet = new HashSet();
someSet.add(new PersistentClass());
someSet.add(new PersistentClass());
assert(someSet.size() == 2);
равно тому же объекту из другого сеанса :
Будет ли работать следующее или нет:
PersistentClass p1 = sessionOne.load(PersistentClass.class, new Integer(1));
PersistentClass p2 = sessionTwo.load(PersistentClass.class, new Integer(1));
assert(p1.equals(p2));
коллекции сохраняются после сохранения :
Будет ли работать следующее или нет:
HashSet set = new HashSet();
User u = new User();
set.add(u);
session.save(u);
assert(set.contains(u));
Также выделен этот поток , где широко обсуждается реализация equals / hashCode