Проблема с двунаправленной эффективностью от одного ко многим

StackOverflow https://stackoverflow.com/questions/7836116

Вопрос

У меня есть одно сомнение, тогда мы создаем один ко многим как двунаправленный. Мы поместим однозначное ссылку на родительский класс в детском классе.

Смотрите код.

Человек. Ява

@Entity
@Table(name="PERSON")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="personId")
     private int id;
    @Column(name="personName")
    private String name;
    @OneToMany(cascade =CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinColumn(name="personId") 
    private Set <Address> addresses;
         ....
         ....
}

Address.java

@Entity
@Table(name = "ADDRESS")
public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "addressId")
    private int id;
    @Column(name = "address",nullable=false)
    private String address;
    @ManyToOne(cascade =CascadeType.ALL)
    @JoinColumn(name="personId",nullable=false)
    private Person person;
           ....
           ....
    }

здесь Человек. Ява родительский класс и Address.java Детский класс. Когда мы получаем родительский объект из базы данных, он загружает дочерний класс. это нормально. нет проблем.

Но в наоборот, т.е. Если мы получаем урок ребенка, он также проводит родительский класс (человек).

Например: мы получаем адрес по идентификатору адреса. Просто предположим, что извлечен 100 адреса из базы данных.

Но в классе адреса человек Переменная Удерживает родительский (человек) объект ASLO.

Мое сомнение здесь

используется разные 100 памяти человека. с теми же данными. в Адрес класс. ?

Мой дао такой.

public List<Address> getAllAddressByPersonId(int personId) {
        List<Address> addressList =  null;
        try {
            DetachedCriteria criteria = DetachedCriteria.forClass(Address.class);
            criteria.createCriteria("person").add(Restrictions.eq("id", personId));
            addressList = getHibernateTemplate().findByCriteria(criteria);
        } catch (HibernateException e) {
            e.printStackTrace();
        } catch (DataAccessException e) {
            e.printStackTrace();
        }

        return addressList;

Просто предположим, что размер addrssslist составляет 100.

как

per =  addressList.get(0).getPerson() , 

per 1 = addressList.get(1).getPerson(),

per2 = addressList.get(2).getPerson(),

....

per99 =  addressList.get(99).getPerson(). 

здесь PER1, PER2 .... и на 99 используют одну и ту же память или разные.

Если то же самое в порядке ... иначе это может вызвать какую -либо проблему с использованием большего количества памяти.?

Помогите, пожалуйста ...

Это было полезно?

Решение

Hibernate делает проверку личности. Один сеанс Hibernate содержит только один экземпляр объекта с тем же идентификатором. Так что, если за, PER1, ... PE99 - это один человек, у вас будет один объект для него. В противном случае - разные объекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top