Это много обсуждалось (например, здесь и там), и мне кажется полезным использовать" бизнес-ключи "при реализации метода hashCode для таких объектов Hibernate, как:
public class User {
private String username;
...
@Override
public int hashCode() {
//Calculate on base of username
}
}
Это лучше, чем использование идентификатора в случаях, когда идентификатор генерируется спящим режимом (он будет нулевым для новых сущностей).
Что, если сущность состоит только из «виртуальных» лениво загружаемых свойств? Я мог рассчитать хэш-код на их основе и до сих пор это делал. Теперь я столкнулся с проблемой, заключающейся в том, что при вызове hashCode()
сеанс закрывается, и поэтому к ленивым загруженным свойствам больше нельзя получить доступ. Что делать в таких случаях?