Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate загрузка двух одинаковых объектов


Автор: integral 30.9.2010, 14:51
предположим у нас есть иерархия объектов в виде А является родителем для В и С.
Работаем с одной сесией,
Делаем вызов в стиле
Node A1 = B.getParent()
затем извлекаем 
Node A2 = C.getParent()
в результате имеем два инстанса одного родителя.  smile  Можно как-то сделать что-бы хибернейт возращал во втором случае референс на уже полученый иснтанс? 
переопределить для класса методы equals() и hashCode() поможет?

Автор: MisterCleric 30.9.2010, 15:20
Привет. Да поможет. Так как именно эти методы Hibernate использует для проверки идентичности объектов в кеше первого уровня.
У меня есть такой class:
Код

public abstract class BaseEntity<ID extends Serializable> implements Serializable {
    public abstract ID getId();

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        BaseEntity other = (BaseEntity) o;

        if (getId() != null ? !getId().equals(other.getId()) : other.getId() != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return getId() != null ? getId().hashCode() : super.hashCode();
    }
}


И от него наследуются все сущности.
А еще можно почитать:
http://www.google.com/search?q=hibernate+equals+and+hashCode

Автор: Старовъръ 19.10.2010, 13:00
Только ID нехорошо использовать для для реализации equals() & hashCode(), о чем говорится по первой же ссылке в том гугл запросе: http://community.jboss.org/wiki/EqualsandHashCode smile
Цитата
Так как именно эти методы Hibernate использует для проверки идентичности объектов в кеше первого уровня.
А разве не по идентификаторам это решается?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)