Това е обсъждано много (напр. тук и там) и за мен звучи полезно да използвам „бизнес“ ключове, когато внедрявам метода hashCode за обекти на Hibernate като:
public class User {
private String username;
...
@Override
public int hashCode() {
//Calculate on base of username
}
}
Това е по-добре от използването на идентификатора в случаите, когато идентификаторът се генерира от хибернация (той ще бъде нулев за нови обекти).
Какво става, ако даден обект се състои само от „виртуални“ свойства, заредени отложено? Можех да изчисля hashCode въз основа на тях и го направих досега. Сега се натъкнах на проблема, че когато се извика hashCode()
, сесията се затваря и така мързеливо заредените свойства вече не могат да бъдат достъпни. Какво да правим в такива случаи?